2013-11-17 2 views
-1

EDIT: мое плохое было опечаткой в ​​db - все записи имели дополнительное пространство в начале кода, кроме первого - вот почему я получал только первая записьStrange PDO select statement behavior - выбор только первой записи

его самый простой запрос - я найти запись с соответствующим code и active поля со значением 1. Если есть такая запись, которую я обновить поле 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. Если я пытаюсь искать другие, он всегда возвращает 0 строк, хотя поле active все равно 1. Вот снимок из базы данных - code поле индексируется varchar длина 255. Как это работает только для первой записи, а не для других. ..?

enter image description here

+0

Получаете ли вы действительное значение в '$ _POST [" code "]'? –

+0

Да - я даже пытался с жестко заданными значениями .. и все тот же .. так странно .. – fjckls

+1

Этот вопрос не соответствует теме, потому что ошибка вызвана опечаткой –

ответ

0

, как я вижу ее не работаю для любого поля, потому что ваше заявление обновления говорит, чтобы обновить активный 0, если найдено. Я не уверен, если вы получаете что-либо от

array($_POST["code"]); 

, если его только один вход поля, то просто использовать

$_POST["code"]; 
0

Вам нужны цикл, если вы хотите иметь несколько значений в заполнителях

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

     $STH->execute($Row) 

}