Php &引用;调用非对象上的成员函数fetch_row();尽管处理错误
我想执行一个查询,但php/mysql抛出 对非对象调用成员函数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
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."
}
?>