【问题标题】:Laravel query returns question mark instead of variable valueLaravel 查询返回问号而不是变量值
【发布时间】: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 回答的那样,您的解决方案是。

标签: php mysql laravel


【解决方案1】:

这就是toSql() 的工作原理。该方法用于调试。

https://scotch.io/tutorials/debugging-queries-in-laravel

【讨论】:

  • 我现在觉得很愚蠢。但是我通读了链接,安装了调试栏并弄清楚了准备好的语句的哪一部分出错了。谢谢!
  • 另一种调试 sql 查询的方法是打开 mysql 调试,以便它记录所有已运行的查询。见:stackoverflow.com/questions/6479107/…
猜你喜欢
  • 2020-08-20
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
  • 2015-11-02
  • 2017-08-22
  • 2020-03-15
相关资源
最近更新 更多