2012-04-25 27 views
-1

这行代码有什么问题?获取我的查询错误

$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

+0

试试'echo $ query'。它可能会提示问题是什么。 – 2012-04-25 17:31:10

+1

你听说过小鲍比桌吗? http://bobby-tables.com/ – 2012-04-25 18:45:12

+1

“这行代码有什么问题?”?哦,非常,非常非常。 – Andrew 2012-04-26 21:11:44

回答

-2

试试这个

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

What is wrong with this line of code?

基本上,你有一个阵列$COOKIE,我相信这是我假设你正在访问的是$_COOKIE,但由于它被封装在一个字符串中,所以你需要帮助PHP的解析器指出是的,它实际上是一个变量(数组),而不是字符串的一部分。要做到这一点,当在“字符串”中使用它们时,应该将变量封装在{$like_this}左右;

4

您的解决方案容易受到SQL注入的影响;如果我的cookie的用户ID是1; drop table follow; --,会发生什么情况?告别你的追随表。

您至少需要使用mysql_real_escape_string()(编辑:并在插值变量周围加引号),详情请参阅this page。但你真的想要prepared statements

+0

他们需要使用mysql_real_escape_string()的任何理由? – 2012-04-25 18:48:24

+4

因为将原始用户提供的数据插入到SQL查询中是错误的。 – Venge 2012-04-25 18:51:37

+1

这几乎就像mysql_real_escape_string被设计为在将它们传递给MySQL之前转义字符串一样! – Venge 2012-04-25 18:55:25

-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"; 
+1

如果用户标识不是int,该怎么办? – Venge 2012-04-25 19:44:52

+0

@帕特里克哦。你确定这对你很重要吗? :) – 2012-04-25 20:01:29

+0

*叹息*这至少比'mysql_real_escape_string'更正确。 – Ryan 2012-10-30 02:36:20

3

不能使用引号的字符串数组里面的键。您必须使用{...}语法,或跌落引号(这将发出一个警告一个字符串,但你知道,PHP)

每个人都坚持使用mysql_real_escape_string是正确的,每个人都坚持使用PDO与准备好的声明远远更正确。

+1

大家都坚持使用mysql_real_escape_string是IN-friggin正确的并且没有任何线索。 – 2012-04-25 18:59:18