2015-03-13 98 views
1

我正在尝试使用PHP,SQL,PDO创建一个基本的评分函数,该函数将用户给“字段recipe_rating”的评分值添加进来,然后添加1到“recipe_ratingcounter”字段。

但是,有些东西并不完全正确,我的代码在下面!两行$ query1-> bindValue(2,$ recipename);和$ query2-> bindValue(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(); 
} 

任何帮助将非常感激。

+0

您对使用GET还是POST是否感到困惑。尝试'$ _REQUEST',因为它涵盖了两者。 – developerwjk 2015-03-13 16:34:37

+3

这两种情况之间只有一个区别($ _GET vs $ _POST) - 因此页面被调用的查询字符串无效(不包含'name'或期望值)。 – user2864740 2015-03-13 16:35:08

+0

除了get v.s/tuna bit之外,你的两个代码示例没有区别。 MySQL或PHP可以不关心这一点。就任何一方而言,他们只会是字符串。 – 2015-03-13 16:35:16

回答

-1

bindValue用于原始值。例如:

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

对于变量内的值,您必须使用bindParam。例如:

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

这是不正确的。你可以在'bindValue'中使用变量,它们不会被引用绑定。 – Phil 2015-03-14 00:16:02