Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php &引用;调用非对象上的成员函数fetch_row();尽管处理错误_Php_Mysql_Mysqli - Fatal编程技术网

Php &引用;调用非对象上的成员函数fetch_row();尽管处理错误

Php &引用;调用非对象上的成员函数fetch_row();尽管处理错误,php,mysql,mysqli,Php,Mysql,Mysqli,我想执行一个查询,但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) { e

我想执行一个查询,但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];
}
?>


它可以工作。

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

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

$results
本身将告诉您操作是否成功(查询在语法上是否有效),但
$link->infected_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;
}

由于您似乎正在使用MySQL,请考虑为此创建一个准备好的语句而不是<代码> Quices()/<代码>。p>

$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...
}

您正试图从查询中提取一行作为对象,但是您所做的查询是一个删除,它不返回可以作为行提取的值,而是一个布尔值(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."
}
?>


您是否初始化了变量
$link
?为什么希望从
删除中返回结果?我不认为这应该作为本地化关闭。我花了几个小时的时间从php文档和在线示例中获取代码。使用的建议对我来说是固定的。使用预先准备好的语句比我的方法有什么好处?@JackyRank优点总是安全的,因为您不需要对输入进行消毒(尽管您可能仍然从验证中受益),请参见“好”。看这里:@JackyRank我很高兴看到你在尝试。前面的工作可能看起来很大,但您已经习惯了额外的几行代码,这在安全性方面确实是值得的。(第一个答案是正确的-您不应该引用占位符
而不是
“?”
。这会导致“致命错误:对非对象调用成员函数bind_param()”
$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...
}
<?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."
}
?>