2014-09-10 106 views
0

CODE:使用循环生成PHP中的SQL查询

$nerd_result = mysql_query("select * from nerd_profile where nerd_reg_no = '$reg_no'"); 
$nerd_data = mysql_fetch_array($nerd_result); 
$tags = array(); 
$tags = explode(",",$nerd_data['nerd_interests']); 
for($i = 0; $i < sizeof($tags)-1; $i++) 
{ 
    if($i != sizeof($tags)-2) 
    { 
    $sub_query = $sub_query."`tags` like %".$tags[$i]."% or "; 
    } 
    else 
    { 
     $sub_query = $sub_query."`tags` like %".$tags[$i]."% "; 
    } 
} 



$proper_query = "select * from `qas_posts` where ".$sub_query." and `post_date` like '%$today%'"; 
$result = mysql_query($proper_query); 
while($each_qas = mysql_fetch_array($result)) 

说明:

我加入类似条款与PHP变量沿着一个字符串,并将进一步相连来带有类似子句的变量来。在我回应,我得到我想要的完美的查询,但

mysql_fetch_array() 

不一样,如果我硬编码,它的作品完美我究竟做错了接受生成的查询,而结束?我可以这样做吗?

+2

这'%”。$标签[$ i]。 “%'需要是这个''%”。$标签[$ i]。“%”'。你缺少报价。另外,初始化变量通常是一个好主意,例如'$ sub_query =“”;'。 – imtheman 2014-09-10 21:36:15

+0

ohh我的天啊....引用...为什么我没有看到...我一直在网上看了一个小时吧..谢谢:) – 2014-09-10 21:38:46

+0

* PSA:* mysql_ *'函数是[不推荐使用PHP 5.5](http://php.net/manual/en/faq.databases.php#faq.databases.mysql.deprecated)。不建议您编写新的代码,因为这会阻止您将来升级。相反,请使用[MySQLi](http://php.net/manual/en/book.mysqli.php)或[PDO](http://php.net/manual/en/book.pdo.php)和[是一个更好的PHP开发人员](http://jason.pureconcepts.net/2012/08/better-php-developer/)。 – 2014-09-10 21:40:09

回答

2

在mysql中进行字符串比较时,您需要确保您的比较值附近有引号。

$sub_query = $sub_query."`tags` like '%".$tags[$i]."%' or "; 

$sub_query = $sub_query."`tags` like '%".$tags[$i]."%' ";