PHP PDO BindValue无法正常工作

时间:2015-03-13 03:53:03

标签: php mysql pdo

我正在尝试使用PHP,SQL,PDO创建一个基本的评级函数,它增加了用户给予字段的评级值" recipe_rating"然后在字段中添加1" recipe_ratingcounter"。

但是,下面的代码有些不对劲!两行$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();
}

2 个答案:

答案 0 :(得分: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 );

答案 1 :(得分:0)

您可能会在此行中不必要地为字符串添加额外的引号:

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

看起来你正试图逃避$ recipename,但由于你正在使用PDO,你应该删除它,因为他们会为你处理这个。