以下是我的相关代码:
<?php
require("common.php");
$userID = $_SESSION['user']['id'];
echo $userID;
if(!empty($_POST))
{
if(empty($_POST['bio']))
{
die("Please enter your Bio.");
}
if(empty($_POST['location']))
{
die("Please enter your location");
}
$query = 'UPDATE users
SET usertype = 1
WHERE id="$userID"';
$query_params = array(
':bio' => $_POST['bio'],
':location' => $_POST['location'],
);
try
{
$stmt = $db->prepare($query);
$result = $stmt->execute();
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}
// header("Location: myprofile.php");
}
?>
我尝试在提交表单时将字段usertype更新为1,其中id与当前会话的id匹配,如变量$ userID中所设置的那样。当代码运行时,它没有提供任何错误,但在查询中使用PHP变量似乎不起作用,该字段不会更新。
我尝试过不同的引号,我可以在多个if语句中访问变量,但不能在查询中访问。另外,我正在使用PDO。任何帮助表示赞赏!
答案 0 :(得分:1)
您在查询中使用了错误的引号。将它们改为:
$query = "UPDATE users
SET usertype = 1
WHERE id='$userID'";
如果要将变量传递给字符串而不连接它,则使用引号。并且MYSQL需要撇号来将值理解为字符串。
这就是你出错的地方:你在查询中使用引号"
。
由于您已经在使用PDO,所以我没有看到将用户ID作为参数传递的任何问题:
$query = 'UPDATE users
SET usertype = 1
WHERE id=:userid';
$query_params = array(
':bio' => $_POST['bio'], //I think you will need to add those
':location' => $_POST['location'], //parameters to the string or it will fail
':userid' => $userID
);
当然,你可以使用带有撇号的PHP字符串,但你需要转义mysql查询的撇号,并连接变量,如下所示:
$query = 'UPDATE users
SET usertype = 1
WHERE id=\''.$userID.'\'';