2012-01-28 3 views
0

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

Я получаю эту ошибку:
exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in D:\xampp\htdocs\logansarchive\admin\do.article.php:25 Stack trace: #0 D:\xampp\htdocs\logansarchive\admin\do.article.php(25): PDOStatement->execute() #1 {main}

Вот мой код:

$sql = "update articles set". 
    "category = :cat,". 
    "articletitle = :title,". 
    "articlecontent = :content". 
    "where articleid = :target"; 

$result = $dbh->prepare($sql); 
$result->bindParam(":cat", $category); 
$result->bindParam(":title", $title); 
$result->bindParam(":content", $content); 
$result->bindParam(":target", $target); 
$result->execute(); 

Я нашел этот Not able to update rows using PDO , который выглядит очень похож на то, что я делаю, но я не конечно, как исправить мой код на основе этого, так как я не вижу никаких проблем, перечисленных там парнем, который ответил на этот вопрос.

Любая помощь будет принята с благодарностью.

Спасибо за ваше время!

+2

Какова необходимость разбить инструкцию SQL и закрыть каждую цитату новой строкой? Почему бы просто не оставить цитату открытой сверху вниз? – lethalMango

+0

@lethalMango Я предполагаю, что вы тот, кто отказался от вопроса? Просто назови эту неопытность. Я делаю то же самое в vb.net, чтобы сделать мой код более удобочитаемым. Насколько мне известно, это был единственный способ сделать это. – Ortund

+1

Вы увидите из моего профиля, что я никогда не проголосовал за вопрос, так что это не я. Я все для неопытных вопросов - это одно из основных видов использования SO :) – lethalMango

ответ

0

наши оба кода верны, но инструкция sql имеет две небольшие ошибки. если вы повторяете свой sql, тогда вы можете увидеть, что вы забыли два пробела ... один в строке один после набора «обновления статей», а второй в строке 4 после: content «articlecontent =: content» ... теперь он должен работать !

+0

$ sql = "обновление набора статей". "category =: cat,". "articletitle =: title",. "articlecontent =: content". "где articleid =: target"; Это будет прочитано как 'update articles setcategory = ..., articletitle = ..., articlecontent = ... где articleid = ...' где ... - соответствующее значение. Добавлены пробелы, и теперь они работают – Ortund

0
$sql = "update articles set ". // whitespace after set 
"category = :cat,". 
"articletitle = :title,". 
"articlecontent = :content ". // whitespace after :content 
"where articleid = :target"; 

$result = $dbh->prepare($sql); 
$result->bindParam(":cat", $category, PDO::PARAM_INT); 
$result->bindParam(":title", $title, PDO::PARAM_STR); 
$result->bindParam(":content", $content, PDO::PARAM_STR); 
$result->bindParam(":target", $target, PDO::PARAM_INT); 
$result->execute(); 
+0

получил какое-либо объяснение, почему это действительно сработает? Вы бы посмотрели на это, это не так ... – Ortund

+0

наши оба кодекса верны, но оператор sql имеет две небольшие ошибки. если вы повторяете свой sql, тогда вы можете увидеть, что вы забыли два пробела ... один в строке один после набора «обновления статей», а второй в строке 4 после: content «articlecontent =: content» ... теперь он должен работать ! – Daniel

+0

Даниэль, я этого не видел, спасибо. Если вы можете ответить на этот вопрос, я буду благодарен вам за это. – Ortund

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