2013-07-11 63 views
1

我知道这和其他很多帖子都是一样的,但我无法想象它!PHP - mySQL“like”query return nothing

我的代码看起来是这样的:

$i=0; 
$shelves = array(); 
$shelves['position'] = array(); 
$query = "select id, cat_id, book_title, writer, publisher, issue_year, copies, abstract from library where $table like '%$search_param%'"; 
$result = mysql_query($query); 
while ($data = mysql_fetch_assoc($result)) { 
    error_log($data['id']); 
    $shelves['position'][$i]['id'] = $data['id']; 
    $shelves['position'][$i]['cat_id'] = $data['cat_id']; 
    $shelves['position'][$i]['book_title'] = $data['book_title']; 
    $shelves['position'][$i]['writer'] = $data['writer']; 
    $shelves['position'][$i]['publisher'] = $data['publisher']; 
    $shelves['position'][$i]['issue_year'] = $data['issue_year']; 
    $shelves['position'][$i]['copies'] = $data['copies']; 
    $shelves['position'][$i]['abstract'] = $data['abstract']; 
    ++$i; 
} 
error_log(count($shelves['position'])); 

而且因为有其他的职位像这样的音调我想他们的解决方案:

$query = sprintf("select id, cat_id, book_title, writer, publisher, issue_year, copies, abstract from library where %s like'%%%s%'",mysql_real_escape_string($table),mysql_real_escape_string($search_param)); 

或者类似的东西:

$query = "select id, cat_id, book_title, writer, publisher, issue_year, copies, abstract from library where $table like '%{$search_param}%'"; 

我也尝试运行查询没有动态变量只是文本和我得到了同样的事情。

$query = "select id, cat_id, book_title, writer, publisher, issue_year, copies, abstract from library where book_title like '%lord%'"; 

似乎没有任何工作。

我已经在mysql工作台上测试了我的查询,它的功能就像一个魅力!

在所有三个查询中,我从来没有得到第一个error_log的日志,第二个查询每次都对我大喊大叫!

请问有人照明的方式吗?

+0

$表中有什么? – swapnesh

+0

你会得到什么结果? – Tom

+1

让我们做一些简单的事情,首先是'mysql_query($ query)或者死亡(mysql_error();''这样我们就可以看到是否有任何错误。 – DevZer0

回答

2

好了,这里可疑的唯一的事情是你使用的charset/collation,这可能会导致敏感的情况下发行。试试forcing a non-sensitive collation,看看会发生什么。

SET NAMES 'utf8' COLLATE 'utf8_general_ci'; 

甲utf8_bin(或就此而言任何* _bin)使比较区分大小写。如果将连接排序规则设置为不敏感的作品,那将解释您的脚本和MySQL Workbench之间的差异。

无论如何,我会设置排序规则以区分大小写以避免此类问题。

+0

我的表整理是utf8 - utf8_bin。 关于强迫的事情,你可以给我一个例子,我还没有做到现在! 谢谢。 –

+0

看到我最后的编辑 – LexLythius

+0

谢谢你是我的问题希望这有助于其他人! –

0
The query getting correct answer.. 

Try this: 

$i=0; // before start while loop,you need to initialize i 

while ($data = mysql_fetch_assoc($result)) { 
    error_log($data['id']); 
    $shelves['position'][$i]['id'] = $data['id']; 
    $shelves['position'][$i]['cat_id'] = $data['cat_id']; 
    $shelves['position'][$i]['book_title'] = $data['book_title']; 
    $shelves['position'][$i]['writer'] = $data['writer']; 
    $shelves['position'][$i]['publisher'] = $data['publisher']; 
    $shelves['position'][$i]['issue_year'] = $data['issue_year']; 
    $shelves['position'][$i]['copies'] = $data['copies']; 
    $shelves['position'][$i]['abstract'] = $data['abstract']; 
    ++$i; 
} 
+0

对不起,我有你提到的线我只是忘了把问题放在! –

+0

没关系..你尝试获取数组“,而($ data = mysql_fetch_array($ result))” – naveen

+0

我得到同样的东西。 –

0

试试看可能对您有帮助。

$query ="select id, 
       cat_id, 
       book_title, 
       writer, 
       publisher, 
       issue_year, 
       copies, 
       abstract 
       from library 
       where ".$table." like "%".$search_param."%"; 

但它尚未测试。