奇怪的预备语句错误

时间:2012-06-04 17:54:01

标签: php mysql mysqli prepared-statement

以下是我的陈述的样子。

               $stmt = $this->db->prepare("
                        select q.id 
                        from questions q 
                        left outer join (
                        select max(chk_date) as questions_last_chk_date 
                        FROM last_check_date 
                        where user_id = ? 
                        AND chk_token=?) lcd 
                        on q.add_dt > lcd.questions_last_chk_date
                        WHERE q.author_id<>?
                ") or die($this->db->error);
                $stmt->bind_param("isi", $_SESSION["userID"], "q", $_SESSION["userID"]) or die($stmt->error);

我有两个问题

1)获取错误消息

致命错误:无法通过引用传递参数3

为什么会出现此错误?顺便说一句,我知道last_check_date表是空的,但我认为它与此问题无关。

2)在Windows上,获取错误消息表last_check_date不存在,但我100%知道没有拼写错误,并且表存在。我尝试使用Navicat - db amanger应用程序进行相同的查询并获得结果。但是当我尝试用PHP获取此错误时。在远程Linux服务器上它工作,并收到问题1中的错误消息。尝试重新启动mysql服务,重命名为其他名称并将名称更改回以前的名称。没有成功!我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您必须将q放入变量。

仅供参考,尽量不要使用字符串值等于表别名或引用。当您拥有包含q别名的表时,您传递的值为q。这不是错误,但如果您需要对查询进行回显,可能会非常混乱。