0

我有一个查询,它从表中选择随机行,并试图选择 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();
4

1 回答 1

0

您缺少错误检查。

每次准备或执行查询时,都应该检查结果。如果出现错误,该函数将返回false 。

例如,如果我尝试运行您的查询,则会收到以下错误:

ERROR 1052 (23000): Column 'id' in field list is ambiguous

此查询中有两id列: r1.idr2.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);
}
于 2013-08-23T23:44:15.150 回答