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)
答案 0 :(得分:3)
您可以使用mysqli_num_rows
来实现此目的。在你的情况下,我会做这样的事情:
$result = $sql->query();
$row_cnt = $result->num_rows;
而不是$sql->execute();
。
答案 1 :(得分:1)
通过SQL查询解决方案:
DELETE FROM `table_name` WHERE ID IN (SELECT DISTINCT ID
FROM `table_name` GROUP BY ID HAVING COUNT( * ) > 0)