【发布时间】:2017-01-08 11:37:45
【问题描述】:
当我这样做时(在 laravel 中):
<?php
\DB::select('SELECT * FROM my_table WHERE id = :id || id = :id', [
'id' => 1,
]);
上面写着:
SQLSTATE[HY093]: 参数号无效(SQL: SELECT * FROM my_table WHERE 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']);
}
成功了。我做错了什么?
附:显然,我遇到问题时运行的查询更有意义。
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
【问题讨论】:
-
在查询中最好使用
OR而不是|| -
但是为什么
id = :id两次呢?与OR连接? -
就像我说的,查询有点牵扯,比如
... ACOS(SIN(RADIANS(lat)) * SIN(RADIANS(:lat)) + COS(RADIANS(lat)) * COS(RADIANS(:lat)) * COS(RADIANS(:lng - lng))) * 6371 ...,你可以在这里看到:lat参数。
标签: php mysql sql laravel query-builder