1
SELECT * FROM `products` WHERE `category` = ?

无论如何mysqli,如果该语句返回空结果,是否知道使用和不获取?

$sql = $mysqli->prepare("SELECT * FROM `products` WHERE `category` = ?");
$sql->bind_param('s', $category);
$sql->execute();

var_dump($sql);
exit();

如您所见,我正在使用 var_dump 来查看是否有任何属性可以用于此目的。结果如下:

object(mysqli_stmt)#2 (9) { 
["affected_rows"]=> int(-1)
["insert_id"]=> int(0)
["num_rows"]=> int(0)
["param_count"]=> int(1)
["field_count"]=> int(7)
["errno"]=> int(0) 
["error"]=> string(0) "" 
["sqlstate"]=> string(5) "00000"
["id"]=> int(2) }

我看不到任何可以用于了解查询是否返回某些行的目的。


或者,是否有可能在查询本身中解决整个问题?例如,if (SELECT * FROM products WHERE category = ?, RETURN 1, RETURN 0)如果查询成功返回一些行,将始终返回 1?

我只想在没有产品与之关联的情况下从数据库中删除一个类别:只用几行代码这样做会好得多,但我不完全确定这是否可行

if (SELECT * FROM products WHERE category = ?, RETURN 1, (DELETE FROM categories WHERE name = ?))

最好的方法是什么?谢谢。


编辑:num_rows 不起作用

$sql->bind_param('s', $c);
$sql->execute();

while($sql->fetch())
printf("one line - " . "\n");

var_dump($sql->num_rows);
exit();

结果:

一行 - 一行 - 一行 - 一行 - 一行 - 一行 - int(0)

4

2 回答 2

3

您可以使用mysqli_num_rows来实现这一点。在你的情况下,我会做这样的事情:

$result = $sql->query();
$row_cnt = $result->num_rows;

而不是$sql->execute();.

于 2013-06-13T17:26:55.193 回答
2

通过sql查询解决方案:

DELETE FROM `table_name` WHERE ID IN (SELECT DISTINCT ID 
FROM `table_name` GROUP BY ID HAVING COUNT( * ) > 0) 
于 2013-06-13T17:34:55.527 回答