【发布时间】:2018-06-02 09:57:32
【问题描述】:
我正在将一个 PHP PDO 实例转换为 Laravel 5.5。我将数据库连接从/更改为:
//$dbc = new PDO ('mysql:host='. $DB_HOST .';dbname='. $DB_NAME, $DB_USER, $DB_PASS);
$dbc = \Illuminate\Support\Facades\DB::connection('foobardb')->getPdo();
由于某种原因,这导致我的 SELECT 查询失败。
$query = "SELECT *
FROM foobartable
WHERE date_created > :sunday
AND date_created <= :monday
AND date_updated > :sunday
AND date_updated <= :monday";
$stmt = $dbc->prepare($query);
$stmt->bindValue(':monday', $monday, PDO::PARAM_STR);
$stmt->bindValue(':sunday', $sunday, PDO::PARAM_STR);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
根据堆栈跟踪,该错误是专门在$stmt->execute();上触发的
SQLSTATE[HY093]: 参数号无效
我显然有correct parameters,并且使用 PHP 的 PDO 实例可以正常工作,那么为什么它不适用于 Laravel?
【问题讨论】:
-
请记住,您通常可以使用
date_updated BETWEEN ? and ?简化这种查询,而不必单独指定边界。 -
这是一个好点,我经常忘记这一点。
-
BETWEEN使用封闭边界,因此WHERE a BETWEEN b AND c转换为a >= b AND a <= c。要确定这是否等同于您尝试实施的规则,您必须查看绑定值类型和数据库字段类型以查看边界是否正确重合(例如日期/日期时间/unix时间戳/等)
标签: php mysql laravel pdo laravel-5.5