2013-12-13 4 views
0

Я пытаюсь использовать цикл foreach для обновления базы данных с параметрами привязки PDO. Кажется, что все настроено по желанию, только проблема в запросе не выполняется и обновляет базу данных по своему усмотрению.Попытка вставить параметры привязки pdo в базу данных mysql

try { 
    $dbh = new PDO('mysql:host=localhost;dbname=Batik', 'root', 'root'); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $table = $_SESSION['table']; 
    error_log($table); 
    parse_str($_POST['pages'], $pageOrder); 
    $query = "UPDATE $table SET `order` = ':key' WHERE `id` = ':value'"; 
    $STH = $dbh->prepare($query); 


    foreach ($pageOrder['page'] as $key =>$value) { 
     error_log($key.$value); 
     $STH->bindParam(':value', $value); 
     $STH->bindParam(':key', $key); 
     //error_log(print_r($STH)); 
     //error_log(var_dump($STH)); 
     //error_log($STH->debugDumpParams()); 
     $STH->execute(); 

    } 
} catch (PDOException $exception) { 
    echo "There was an error updating your information, please contact James for assistance. "; 
    error_log($exception->getMessage()); 
    }; 

В error.log больше нет ошибок. Он просто не будет обновлять базу данных по своему усмотрению. У меня есть запрос, отлично работающий с mysql_query, но при переключении на PDO я потерял функциональность. Есть ли у кого-нибудь предложения по дальнейшим средствам отладки?

+0

У вас есть таблица с именем '$ table'? вам нужно объединить эту строку .... и нет необходимости в одинарных кавычках вокруг заполнителей параметров –

+1

нет разницы. Мой mysql_query использует ту же таблицу $ var var в запросе, и php правильно интерпретирует переменную. Если это не отличается от PDO. – Jimbob

ответ

4

Вы не должны помещать заполнители в кавычки в SQL. Это должно быть:

$query = "UPDATE $table SET `order` = :key WHERE `id` = :value"; 
+0

Прохладный, спасибо. Это помогло. Я так много играл с ним, что потерялся. Рад, что это было просто. Теперь, есть ли простой способ использовать отчет об ошибках, чтобы найти это? – Jimbob

+1

Нет, потому что ваш код не является ошибкой. Он просто использует эти литералы в запросе. – Barmar

Смежные вопросы