【发布时间】:2016-08-12 18:22:38
【问题描述】:
当我单击一个按钮时,正在对我自己编写的 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 语句中时,查询的执行就像一个魅力。所以没有问题。
所以我的问题是:为什么在查询执行时变量会变成问号,我该如何解决?
提前致谢!
【问题讨论】:
-
简单回答您的问题
Why are the variables turning into question marks when the query executes它们是prepared statements 的一部分的占位符,它不是那样执行,正如Alexey 回答的那样,您的解决方案是。