我有这个:
$result = mysql_query("SELECT * FROM animals WHERE hand= " .$_SESSION['SESS_HAND']. ");
但总是显示“解析错误:解析错误,期待T_STRING' or
T_VARIABLE' 或 `T_NUM_STRING”
始终转义字符串变量:
$result = mysql_query("SELECT * FROM animals WHERE hand= '" .
mysql_real_escape_string($_SESSION['SESS_HAND']). "'");
您的查询不起作用的原因是因为您的 WHERE 的值不在单引号之间。
编辑:昆汀也是对的,你没有关闭最后一个括号的引号;)。
这将使查询工作:
$result = mysql_query("SELECT * FROM animals WHERE hand= '" .$_SESSION['SESS_HAND']. "'");
但就像 a1ex07 指出的那样,你应该总是逃避变量!上面的查询容易受到 MySQL 注入的影响。下面的示例通过转义变量显示了正确的方法,在我看来是更好的可读代码;)。
$query = "SELECT * FROM `animals`
WHERE `hand` = '" .mysql_real_escape_string($_SESSION['SESS_HAND']). "'";
mysql_query($query);
尝试:
$result = "SELECT * FROM animals WHERE hand= " . $_SESSION['SESS_HAND'];
mysql_query($result);
此外,通过这样做,您可以调试您的查询,并通过编写以下代码准确查看它在 SQL 中所做的事情:
echo $result;
它给出了该错误消息,因为您永远不会完成您尝试在会话数据之后附加的字符串:");
。
不过,不要通过将字符串混合在一起来构建 SQL 查询。使用准备好的语句和参数化查询。
问题:
$result = mysql_query("SELECT * FROM animals WHERE hand= " .$_SESSION['SESS_HAND']. ");
解决方案:
if (!$sessHand = mysql_real_escape_string($_SESSION['SESS_HAND']))
{
echo "There was a error: " . mysql_error();
}
else
{ $result = mysql_query("SELECT * FROM animals WHERE hand=$sessHand") }