是否有任何`affected_rows`等效于SELECT语句

时间:2013-06-13 17:22:46

标签: php mysqli

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)

2 个答案:

答案 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)