当值从 $_GET 开始时,PDO 绑定值不起作用


PDO bindValue does not work when value from $_GET

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

但是,我下面的代码有些不太对劲!这两行$query 1->绑定值(2, $recipename);和$query 2->绑定值(1, $recipename);无法正常工作,因为它们实际上并未将任何内容绑定到 SQL 语句中的相应占位符。SQL语法是正确的,因为当上面的$recipename变量被替换为单个字符串(如"金枪鱼意大利面"或"spag bol")而不是$_GET['name']时,整个函数可以完美运行。

Var_dump在以下情况下$recipename显示为字符串:

  • $recipename = $_GET["名称"];

  • $recipename ="金枪鱼意大利面";

。因此我不知道下一步该怎么做,因为我已经尝试了我能想到的一切!

这行得通——

if (isset($_POST["Submit"])) {
$selectedrating = $_POST["rating"];
$recipename = "tuna pasta";
global $con;
$query1 = $con->prepare("UPDATE emptyfridge SET recipe_rating = recipe_rating + :recipe_rating WHERE recipe_name = :recipe_name1");
$query1->bindValue(':recipe_rating', $selectedrating);
$query1->bindValue(':recipe_name1', $recipename);
$query1->execute();
$query2 = $con->prepare("UPDATE emptyfridge SET recipe_ratingcounter = recipe_ratingcounter + 1 WHERE recipe_name = :recipe_name2");
$query2->bindValue(':recipe_name2', $recipename);
$query2->execute();
}

但这行不通——

if (isset($_POST["Submit"])) {
$selectedrating = $_POST["rating"];
$recipename = $_GET['name'];
global $con;
$query1 = $con->prepare("UPDATE emptyfridge SET recipe_rating = recipe_rating + :recipe_rating WHERE recipe_name = :recipe_name1");
$query1->bindValue(':recipe_rating', $selectedrating);
$query1->bindValue(':recipe_name1', $recipename);
$query1->execute();
$query2 = $con->prepare("UPDATE emptyfridge SET recipe_ratingcounter = recipe_ratingcounter + 1 WHERE recipe_name = :recipe_name2");
$query2->bindValue(':recipe_name2', $recipename);
$query2->execute();
}

任何帮助将不胜感激。

bindValue用于原始值。例:

$sql->bindValue(":val1", "tuna pasta");
$sql->bindValue(":val2", 1234);

您必须对变量中的值使用 bindParam。例:

$var1 = "tuna pasta";
$var2 = 1234;
$sql->bindParam(":val1", $var1);
$sql->bindParam(":val2", $var2);