当前位置: 首页 > 面试题库 >

Laravel抱怨名称参数重复的查询

咸高谊
2023-03-14
问题内容

当我这样做时(在laravel中):

<?php
\DB::select('SELECT * FROM my_table WHERE id = :id || id = :id', [
    'id' => 1,
]);

它说:

SQLSTATE [HY093]:无效的参数号(SQL:SELECT * FROM my_table,其中id =:id || id =:id)

但是当我这样做时(使用纯PHP):

<?php
$dbh = new PDO('mysql:dbname=...', '...', '...');
$stmt = $dbh->prepare('SELECT * FROM my_table WHERE id = :id || id = :id');
$r = $stmt->execute([
    'id' => 1,
]);
while ($row = $stmt->fetch()) {
    var_dump($row['id']);
}

成功了。我究竟做错了什么?

PS显然,遇到问题时我运行的查询更有意义。

UPD 或多或少的真实查询:

SELECT id
FROM objects
WHERE ACOS(
    SIN(RADIANS(lat)) * SIN(RADIANS(:lat))
    + COS(RADIANS(lat)) * COS(RADIANS(:lat)) * COS(RADIANS(:lng - lng))
) * 6371 < 10

问题答案:

从我所看到的一切都可以归结为mysql无法处理命名参数。

mysqli::prepare

通过在适当位置嵌入问号(?)字符,此参数可以在SQL语句中包括一个或多个参数标记。

pdo::prepare

调用PDOStatement ::
execute()时,对于要传递给语句的每个值,必须包含一个唯一的参数标记。除非打开了仿真模式,否则在准备好的语句中不能多次使用相同名称的命名参数标记。

Laravel默认禁用
仿真模式。可以通过添加连接设置来启用它。这样,您将获得与纯PHP相同的结果。不过,不确定这是个好主意。config/database.php``'options' => [PDO::ATTR_EMULATE_PREPARES => TRUE]



 类似资料:
  • 我想在我的项目中使用Jetbrains@nullable/@notnull注释。 我有一个具有@NotNull字段的类。构造函数自然不接受,而是抛出异常。当然,这个构造函数的参数也是用@NotNull注释的。 为什么IntelliJ IDEA抱怨空检查?文件指出: 带NotNull注释的元素声明null值被禁止返回(对于方法)、传递(参数)和保留(局部变量和字段)。 但是我仍然必须在运行时检查nu

  • 请按顺序阅读代码中的注释,问题详细信息在那里<为什么会出现这种差异 如果可能,请引用JLS。 我最初在IntelliJ IDEA中发现了这一点,但我猜编译器与javac兼容,因为当我用以下代码编译上述代码时,它给出了相同的错误/警告。

  • 问题内容: 用Pycharm的代码检查器初始化字典时,会产生警告,说 这个字典的创建可以重写为字典文字。 如果我重写它,警告就会消失。由于已经 是 字典文字,因此我很确定该消息是错误的。此外,似乎两者都有效,并且是Pythonic。 这个相关的问题似乎可以得出结论,选择仅取决于样式/偏好: “ d = dict()”和“ d = {}”之间的差异 皮查姆为什么会抱怨? 更新: Mac钉了它。该警告

  • 问题内容: 在两个具有相同列名的表上创建VIEW时,如何避免MySQL中的dup列名错误,如下所示 问题答案: 使用别名作为列名

  • 版本: Datastax Java driver 3.1.4, Cassandra 3.10 请考虑下表: 和一个映射类: 为此类创建映射器后(是mykeyspace上会话的) 在呼叫时 我明白了 查询准备失败:INSERT INTO mykey space . object _ ta(objid,objid,version_date,objecttype)值(?,?,?,?);:com . da

  • 我一直在尝试以多种不同的方式在windows上构建fltk,但最终我总是得到: 配置:错误:C编译器无法创建可执行文件(msys fltk/配置) 或 检查C编译器是否正常工作:C:/MinGW/bin/gcc.exe--已损坏(CMake-gui) 我用fltk 1.3.0和1.3.3试用过它,我甚至用过三个不同的MinGW发行版,GCC版本:。但它无法编译。以下是由生成的一些错误日志/配置文件