2

我想执行一个查询,但 php/mysql 抛出

在非对象上调用成员函数 fetch_row()

虽然

if(!$results) 

应该过滤掉空结果。错误消息指向

$row = $results->fetch_row();

这是整个代码:

<?php
$query = 'DELETE FROM `products` WHERE `company` ='.$id_nummer;

$results = $link->query($query);
if(!$results)
{
  echo $link->error;
}
else
{
  $row = $results->fetch_row();
  $wanted_result = $row[0];
}
?>

造成这种情况的原因在哪里?

编辑:我通过替换解决了它

if(!$results)

if(!is_object($results))

它有效。

4

2 回答 2

0

您无法从DELETE查询中获取结果,因为没有要获取的行。的内容$results是一个布尔值 true 或 false,基于 的成功或失败DELETE

在您的情况下,它是TRUE,并且您的if (!$results)评估结果为FALSE,将您发送到else

$results它本身会告诉您操作是否成功(查询在语法上是否有效),但$link->affected_rows会告诉您是否真的设法匹配和删除任何行。

if ($result && $link->affected_rows > 0) {
  // You managed to delete something
}
else if ($result) {
  // successful query, no rows deleted
}
else {
  // Error
  echo $link->error;
}

由于您似乎正在使用 MySQLi,因此请考虑创建一个准备好的语句而不是query()为此。

$stmt = $link->prepare("DELETE FROM `products` WHERE `company` = ?");
$stmt->bind_param('i', $id_nummer);
$stmt->execute();

// Then check affected rows
if ($stmt->affected_rows > 0) {
  // Successful deletion of some rows...
}
于 2013-01-14T15:59:52.620 回答
0

您正在尝试从查询中获取一行作为对象,但是您正在执行的查询是一个 DELETE,它不会返回可以作为一行获取的值,而是一个布尔值(TRUE 或 FALSE),即结果查询成功与否。在这种情况下,$result 应该返回值 TRUE 或 FALSE,可以像这样使用,例如:

<?php
$query = 'DELETE FROM `products` WHERE `company` ='.$id_nummer;    
$results = $link->query($query);

if(!$results) {
    echo $link->error;
} else {
    echo "Company id:".$in_number." successfully deleted."
}
?>
于 2013-01-14T16:07:36.913 回答