我有一个查询从表中选择随机行,我尝试选择id和另外三行,但是当我选择id
进行选择时,它会给我错误。如果我删除id
查询工作正常。我需要id
的原因是因为我需要它通过url传递到第二页。我错过了什么?
Call to a member function execute() on a non-object
查询:
$stmt = $mydb->prepare("SELECT id, title, price, image_one
FROM products AS r1 JOIN
(SELECT (RAND() *
(SELECT MAX(id)
FROM products )) AS id)
AS r2
WHERE r1.id >= r2.id and title != ''
ORDER BY r1.id ASC
LIMIT 1 ");
$stmt->execute();
答案 0 :(得分:0)
您错过了错误检查。
每次准备或执行查询时,都应检查结果。如果出现错误,该函数将返回 false 。
例如,如果我尝试运行您的查询,我会收到此错误:
ERROR 1052 (23000): Column 'id' in field list is ambiguous
此查询中有两个id
列:r1.id
和r2.id
。您需要对列进行限定,以便明确指出要查询的列。
SELECT r1.id, title, ...
但更重要的是,检查prepare()返回的结果。
$stmt = $mydb->prepare(...);
if ($stmt === false) {
trigger_error($mydb->error, E_USER_ERROR);
}
同样的事情适用于execute(),因为这会导致执行时错误:
if ($stmt->execute() === false) {
trigger_error($stmt->error, E_USER_ERROR);
}