2013-08-23 28 views
0

我有一个查询,从表中选择随机行,并试图选择id与另外三行,但是当我包括id被选中它会给我错误。如果我删除id查询工作正常。我需要id的原因是因为我需要它通过url传递到第二页。我错过了什么?无法选择id mysqli

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

你错过了错误检查。

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

例如,如果我尝试运行查询,我得到这个错误:

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

有两个id列在此查询:r1.idr2.id。您需要对列进行限定,以便确定您要查询的是哪一个。

SELECT r1.id, title, ... 

但更重要的是,检查通过准备返回的结果()。

$stmt = $mydb->prepare(...); 
if ($stmt === false) { 
    trigger_error($mydb->error, E_USER_ERROR); 
} 

同样的道理也适用于执行(),因为这可能会导致执行时间错误:

if ($stmt->execute() === false) { 
    trigger_error($stmt->error, E_USER_ERROR); 
} 
+0

我已经有'如果(假=== $语句){ 模('准备()失败:'。htmlspecialchars($ mydb - > error)); }'来检查错误,但在这种情况下它不显示任何内容。 – amdvb

+0

感谢它现在的作品 – amdvb