0

ここで本当に奇妙なことが起こっています。mysqli クエリにはこのメソッドがあります。

    public function select($options) {
    $default = array (
        'table' => '',
        'fields' => '*',
        'condition' => '2',
        'order' => '1',
        'limit' => 50
    );
    $options = array_merge($default,$options);
    $query = "SELECT {$options['fields']} FROM {$options['table']} WHERE {$options['condition']} ORDER BY {$options['order']} LIMIT {$options['limit']}";
    if ($result = $this->conn->query($query)) {
        while ($row = $result->fetch_assoc()) {
            $rows[] = $row;
        }
        return $rows;
    } else {
        printf("Query failed: %s\n", $mysqli->error);
        exit;
    }
}

クエリが実行されると、$rows が取得され、すべてが魅力的に機能します。しかし、配列内の特定のキーを取得しようとすると、特定のメッセージなしで「クエリに失敗しました:」が表示されます:S

$options = array(
        'table' => 'settings',
        'fields' => 'setting_wall_post,setting_status_tag,setting_photo,setting_like,setting_comment',
        'limit' => '1',
        'condition' => "setting_id = 6",
    );
    $check = $this->mysql->select($options);    
    print_r($check);
    $check = $check[0];

    if($check["setting_wall_post"]) //if I comment out this IF block it works :(
        $this->scope["wall_post"] = "publish_stream";

また、mysqli接続を閉じようとしたところ、

Warning: mysqli::query() [mysqli.query]: Couldn't fetch mysqli

この IF ブロックは、mysqli で動作するように動作しています:S

では、問題は、ここで何が問題なのかということです。「setting_wall_post」にアクセスできないのはなぜですか? そのIFブロックをコメントアウトすればうまくいくので、その部分が問題だと思います。

4

1 に答える 1

2

編集。私はばかげて、そのようなタイプミスを見落としていました。 $this->connundefined の代わりになければなりません$mysqli

そのため、常に E_ALL 以上のエラー レポートが必要です。

投稿したコードは、この種のエラーを引き起こすことはできません。
エラー報告コードをこれに変更します

} else {
    throw new Exception($this->conn->error);
}

このようにして、特定のエラーの原因となったコードの場所を指し示す一連の呼び出しを示すスタック トレースが得られます。

ところで、関数全体が使用できず、エラーが発生しやすいように見えます。インジェクションに対してオープンであり、従来の SQL よりも多くのコードを必要とします

于 2013-04-09T13:11:04.877 に答える