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 ですが、結果であるブール値 (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 に答える
0

DELETEフェッチする行がないため、クエリから結果をフェッチできません。の内容$resultsは、 の成功または失敗に基づいた真または偽のブール値です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 に答える