我正在尝试使用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();
}
答案 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,你应该删除它,因为他们会为你处理这个。