2015-03-13 2 views
0

Я пытаюсь создать базовую функцию оценки с помощью PHP, SQL, PDO, которая добавляет значение рейтинга, которое пользователь дает поле «recipe_rating», а затем добавляет 1 к полю « recipe_ratingcounter».PHP PDO BindValue не работает должным образом

Однако с моим кодом ниже что-то не так! Две строки $query1->bindValue(2, $recipename); и $query2->bindValue(1, $recipename); работают некорректно, так как они фактически не привязаны ни к каким вопросительным знакам в инструкции SQL. Я считаю, что SQL корректен, когда я заменяю переменные $recipename в строках выше строкой, такой как «Tuna Pasta», вся функция работает отлично. Я также использовал var_dump для этой переменной, чтобы убедиться, что она действительно содержит строку.

if (isset($_GET['name'])) { 
$name = $_GET['name']; 
$recipedetails = $recipe->get_recipe($name); 

    if (isset($_POST["Submit"])) { 
    $selectedrating = $_POST["rating"]; 
    $recipename = $recipedetails['recipe_name']; 
    $recipename = "'".$recipename."'"; 

    global $con; 
    $query1 = $con->prepare("UPDATE emptyfridge SET recipe_rating = recipe_rating + ? WHERE recipe_name = ?"); 
    $query1->bindValue(1, $selectedrating); 
    **$query1->bindValue(2, $recipename);** 
    $query1->execute(); 
    $query2 = $con->prepare("UPDATE emptyfridge SET recipe_ratingcounter = recipe_ratingcounter + 1 WHERE recipe_name = ?"); 
    **$query2->bindValue(1, $recipename);** 
    $query2->execute(); 
} 
+1

Предполагается ли, что ваши названия рецептов содержат кавычки ('')? $ recipename в конечном итоге будет «имя», а не «имя». –

ответ

0

Использование bindValue для замены заполнителей переменные предваряться двоеточием:

http://php.net/manual/en/pdostatement.bindvalue.php

В частности:

$sth = $dbh->prepare('SELECT name, colour, calories 
    FROM fruit 
    WHERE calories < :calories AND colour = :colour'); 
$sth->bindValue(':calories', $calories, PDO::PARAM_INT); 
$sth->bindValue(':colour', $colour, PDO::PARAM_STR); 

В вашем случае:

$query1 = $con->prepare("UPDATE emptyfridge SET recipe_rating = recipe_rating + :recipe_rating WHERE recipe_name = :recipe_name"); 
    $query1->bindValue(':recipe_rating', $selectedrating); 
    $query1->bindValue(':recipe_name', $recipename); 
+0

спасибо за ваше предложение, но, к сожалению, он все еще не работает –

0

Вы можете добавить дополнительные кавычки, чтобы ваши строки без необходимости с этой линией:

$recipename = "'".$recipename."'"; 

Похоже, что вы пытаетесь потенциально избежать $ RecipeName, но так как вы используете PDOs, вы должны удалить это, как они будут обращаться это для тебя.

+0

спасибо за ваше предложение, но, к сожалению, это не работает ни –

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