2012-02-12 39 views
0

foreach不会回应任何东西,有人知道它有什么问题吗?这个php pdo代码有什么问题?

注意:$ check是复选框的值。

<?php 
    $hostname = 'localhost'; 
    $username = 'root'; 
    $password = ''; 
    $database = 'foo'; 

    try{ 

     $db = new PDO("mysql:host=$hostname;dbname=$database",$username,$password); 

     $checks = $_POST['checks']; 

     $post = "SELECT * FROM articles WHERE title= ' ". $checks ." '"; 

     foreach($db->query($post) as $row){ 
      echo $row['title'] . '' . $row['body']; 
     } 

    }catch(PDOException $e){ 
     echo 'CONNECTION UNSUCCESFUL!'; 
    } 

?> 
+0

你的代码很容易sql注入,请参阅http://php.net/manual/en/security.database.sql-injection.php – VolkerK 2012-02-12 09:01:58

回答

2

标题周围的多余空格?所以带有额外空格的标题永远不会从数据库中获得匹配。

WHERE title= ' ". $checks ." '"; 

更改为

WHERE title= '". $checks ."'"; 

,然后再试一次。

+0

谢谢,伙计。即使我没有向你展示任何数据库的东西,你知道错误是什么,巧妙! – siaooo 2012-02-12 08:00:44

1
$post = "SELECT * FROM articles WHERE title IN (' ". implode("','", $checks) ." ') "; 

如果$检查是数组,那么你应该使用这样

+0

我可以回显$检查就好了 – siaooo 2012-02-12 07:58:27

+0

+1。感谢您的回答。我相信你的答案将来对我有用,下次在处理数组时我会记住implode(),谢谢! XD – siaooo 2012-02-12 08:02:57