Laravel查询返回问号而不是变量值

8

当我点击按钮时,会向我编写的API发出AJAX调用。当单击该按钮时,Javascript文件从单击对象中检索两个data属性,并将其与URL一起发送。这两个变量将用于尚未执行的SQL语句的where子句中。

当进行调用时,处理API请求的PHP脚本通过Input::get('data-attribute-one'))Input::get('data-attribute-two'))接收到这两个变量。当我输出这两个属性时,正确的值会显示。

然而,当我将这些变量放入查询的where子句中时,如下所示:

$fans = Sensor::where('fan_number', '=', $dataAttributeOne)->where('created_at', '>=', $this->now->subHours(6))->get();

未返回任何结果。因此,我用 ->toSql() 替换了 ->get() 以检查查询,然后它向我显示了这一行奇怪的代码:

Object {fans: "select * from "myawesomedatabasetable" where "fan_number" = ? and "created_at" >= ?"}

$dataAttributeOne 是获取的 data-atribute$this->now->subHours(6) 是当前时间减去 6 小时。当我输出这个变量时,它的格式与数据库中的 created_at 值相同,当我在 Phpmyadmin 中将其硬编码到 SQL 语句中时,查询能够成功执行。所以没有问题。

我的问题是:为什么变量在查询执行时变成了问号,我该如何解决这个问题?

提前感谢您的帮助!


1
简单回答你的问题“为什么在查询执行时变量会变成问号”,这是一个占位符,作为预处理语句的一部分。它并不被执行,正如Alexey所回答的那样,这就是你的解决方案。 - Ash
1个回答

10

我现在感觉非常愚蠢...但是我阅读了链接,安装了Debugbar并找出了预处理语句的哪一部分出了问题。谢谢! - Kevin Kromjong
另一种调试SQL查询的方法是打开MySQL调试功能,以便记录所有已运行的查询。请参见:https://dev59.com/UGw15IYBdhLWcg3wpNYB - Mysteryos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接