Php 奇怪的准备语句错误
下面是我的陈述Php 奇怪的准备语句错误,php,mysql,mysqli,prepared-statement,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
$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服务,重命名为其他名称,并将名称更改回以前的名称。没有成功!如何解决该问题?必须将q放入变量中
仅供参考,尽量不要使用等于表别名或引用的字符串值。当您有一个具有q别名的表时,您正在传递q值。这不是一个错误,但如果需要对查询进行回显,可能会非常混乱。我不是MySQLi专家,但我认为您无法将静态参数绑定到查询。在我看来这是完全合理的。因此,要么将参数3设置为一个变量并传递它,要么更改查询,使现在的参数3已经存在于其中。@clentfort I gachu。但无法使用外部联接来完成此工作。我没有外部连接的经验。这就是为什么把问题贴到社区的原因