我的查询出错了

时间:2012-04-25 17:27:31

标签: php mysql

这行代码有什么问题?

$query= "SELECT status FROM follow WHERE user_id1= $COOKIE['user_id'] AND user_id2=  
$user_id";

我不断收到错误消息:

解析错误:语法错误,意外T_ENCAPSED_AND_WHITESPACE,期待T_STRING或T_VARIABLE或T_NUM_STRING

4 个答案:

答案 0 :(得分:4)

您的解决方案容易受到SQL注入攻击;如果我的cookie的用户ID是1; drop table follow; --会怎样?告别你的关注表。

您至少需要使用mysql_real_escape_string()(编辑:并在插值变量周围加上引号),有关详细信息,请参阅this page。但实际上你想要prepared statements

答案 1 :(得分:3)

您不能在字符串中使用带引号的数组键。您必须使用{...}语法,或删除引号(这将在外部发出警告字符串,但您知道,PHP。)

每个坚持使用mysql_real_escape_string的人都是正确的,每个坚持使用PDO准备语句的人都更为正确。

答案 2 :(得分:-2)

试试这个

$query= "SELECT status FROM follow WHERE user_id1 = {$_COOKIE['user_id']}
AND user_id2 = {$user_id}";
  

这行代码有什么问题?

基本上,你有一个数组$COOKIE,我认为它是你正在访问的$_COOKIE,但由于它被封装在一个字符串中,你需要帮助PHP的解析器指出是的,它实际上是一个变量(数组)而不是字符串的一部分。为此,在“字符串”中使用变量时,应将变量封装在{$like_this};

答案 3 :(得分:-4)

单引号分隔数组键导致此错误
要么在字符串中省略这些引号,要么使用花括号。

您还必须确保进入查询的值具有正确的格式

$user_id1 = (int)$COOKIE['user_id'];
$user_id2 = (int)$user_id;
$query="SELECT status FROM follow WHERE user_id1=$user_id1  AND user_id2=$user_id2";