PHP的BUG? preg_replace后导致查询语句失效问题

jimx92 2011-12-25 01:54:57
以下PHP代码里的mysql查询为何得不到结果?
$a = 'Gifts & Party Supplies';
$a = strval(preg_replace("/[[:punct:]]/","",strtolower($a)));// 把&等标点符号去掉,并转为小写 $a='gifts party supplies';
$master_category_id_sql = "select categories_id from categories_description where lower(categories_name)='". $a ."' ";
echo $master_category_id_sql;//查询语句是: select categories_id from categories_description where lower(categories_name)='gifts party supplies'
$master_category_id_q = mysql_query($master_category_id_sql);
$master_category_id_r = mysql_fetch_array($master_category_id_q);
$master_category_id = $master_category_id_r['categories_id'];//产品目录ID
var_dump($master_category_id);//null
我发现php代码中多了那一句: preg_replace("/[[:punct:]]/","",strtolower($a)) 后, 后面的sql查询就得不到结果.
我直接把select categories_id from categories_description where lower(categories_name)='gifts party supplies'这句放到mysql里查询是可以得到结果的.
或者我把这行代码 $master_category_id_sql = "select categories_id from categories_description where lower(categories_name)='". $a ."' "; 里的变量$a去掉, 写成$master_category_id_sql = "select categories_id from categories_description where lower(categories_name)='gifts party supplies' "; 也是可以得到结果的.

问题就出在preg_replace("/[[:punct:]]/","",strtolower($a))这行.
百思不得其解. 麻烦大家解析一下.
...全文
127 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jaksmine 2011-12-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xuzuning 的回复:]
$a = 'Gifts & Party Supplies';
echo $a = strval(preg_replace("/[[:punct:]]/","",strtolower($a)));// 把&等标点符号去掉,

得到的是 gifts party supplies 注意:gifts 后面有两个空格
而你测试成功的是 gifts party supplies 注意:……
[/Quote]

不是这个问题,楼主是(preg_replace("/[[:punct:]]/","",strtolower($a))),把标点换成"",又不是
" ",怎么会多一个空格,而且我输出了两个sql,的确是一样的
$a = 'Gifts Party Supplies';
$a = strval(preg_replace("/[[:punct:]]/","",strtolower($a)));// 把&等标点符号去掉,并转为小写 $a='gifts party supplies';
/*echo $a;*/
$master_category_id_sql1 = "select categories_id from categories_description where lower(categories_name)='". $a ."' ";
echo $master_category_id_sql1.'<br>';

$master_category_id_sql2 = "select categories_id from categories_description where lower(categories_name)='gifts party supplies' ";
echo $master_category_id_sql2.'<br>';

两个sql一摸一样。。。。真是太奇怪了。

帮楼主顶帖,我也不知道是怎么回事,求高手指教。。。。
码无边 2011-12-26
  • 打赏
  • 举报
回复
输出语句看看。
焦sir 2011-12-25
  • 打赏
  • 举报
回复
先想想是不自己的bug
xuzuning 2011-12-25
  • 打赏
  • 举报
回复
$a = 'Gifts & Party Supplies';
echo $a = strval(preg_replace("/[[:punct:]]/","",strtolower($a)));// 把&等标点符号去掉,

得到的是 gifts party supplies 注意:gifts 后面有两个空格
而你测试成功的是 gifts party supplies 注意:gifts 后面只有一个空格

这就不难理解了吧

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧