-1

以下のコードを含む PHP ページをロードすると、「非オブジェクトでメンバー関数 fetch_object() を呼び出します」というエラーが表示されます。これは、while という単語で始まる行に関係します。このエラーが表示されるのはなぜですか? 私のセキュリティ上の弱点を無視してください。

PHP スニペット:

header('Content-Type:application/json;charset=utf-8');

$file_absolute = "---placeholder for correct file path---";
include_once($file_absolute);
$mysql = new mysqli($db_host, $db_username, $db_password, $db_name);
$verb_value = $_POST['verb_value'];

$mysql->query("SET CHARACTER SET 'utf8'");

$result = $mysql->query("SELECT present_tense FROM $verb_value");

$queryResult = array();

while ($row = $result->fetch_object())
{
    $queryResult[] = $row->present_tense;
}
4

2 に答える 2

7

コードにエラーチェックがありません:

$result = $mysql->query("SELECT present_tense FROM $verb_value");
if( !$result)
  die($mysql->error);

$queryResult = array();

while ($row = $result->fetch_object())
{
    $queryResult[] = $row->present_tense;
}

クエリの結果は非オブジェクトですが、それを確認していません。

注: あなたのコードは SQL インジェクションの傾向があります:$verb_value = $_POST['verb_value']チェックせずに SQL コードをデータベースに挿入する可能性があります!

于 2012-09-23T13:08:03.507 に答える
0
$verb_value = $_POST['verb_value'];

$mysql = new mysqli($db_host, $db_username, $db_password, $db_name);

$mysql->query("SET CHARACTER SET 'utf8'");

if (mysqli_connect_errno()) {
       printf("Connect failed: %s\n", mysqli_connect_error());
       exit();
    }
$query = "SELECT present_tense FROM $verb_value";
$queryResult = array();
if ($result = $mysql->query($query)) {
  while ($row = $result->fetch_object()) {
     $queryResult[]=$row->present_tense;
  }
  $result->close();
 }
于 2012-09-23T13:43:50.290 に答える