奇怪的PDO选择语句行为 - 仅选择第一条记录

时间:2013-11-17 10:10:52

标签: php mysql pdo

编辑:我的错误是db中的拼写错误 - 所有记录在代码开头都有一个额外的空格,除了第一个 - 这就是为什么我只得到第一条记录

它是最简单的查询 - 我找到带有值为1的相应codeactive字段的记录。如果有这样的记录,我将其active字段更新为0。

    # MySQL with PDO_MYSQL
    $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
    $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );  

    $sql = "SELECT * FROM codes WHERE code=? AND active=1";
    $STH = $DBH->prepare($sql);  
    $STH->setFetchMode(PDO::FETCH_ASSOC);

    $result = $STH->execute(array($_POST["code"]));
    $row = $STH->fetchAll();

    echo "<pre>", var_dump($row), "</pre>";
    echo $result , " rows: " . $STH->rowCount();

    if($STH->rowCount() == 0){
      echo "Error - this code is inactive";
    }else{
      echo "Code succesfully activated";
      $STH = $DBH->prepare("UPDATE codes SET active=0 WHERE code=?"); 
      $STH->execute(array($_POST["code"]));
    }

但它仅适用于第一条记录847BKX。如果我尝试搜索其他内容,即使active字段仍为1,它也始终返回0行。 以下是来自数据库的快照 - code字段的索引varchar长度为255.为什么它只适用于第一条记录而不是其他记录??

enter image description here

2 个答案:

答案 0 :(得分:0)

我如何看到它不适用于任何字段,因为您的更新语句说如果找到则将活动更新为0。我不确定你是否从

获得任何东西
array($_POST["code"]);

如果它只是一个输入字段,那么只需使用

$_POST["code"];

答案 1 :(得分:0)

如果要在占位符中包含多个值,则需要循环

foreach($_POST["code"] as $Row){

        $STH->execute($Row) 

}