sql >> データベース >  >> RDS >> Mysql

mysql_fetch_array()/ mysql_fetch_assoc()/ mysql_fetch_row()/mysql_num_rowsなど...パラメーター1がリソースであることが必要です

    クエリはさまざまな理由で失敗する可能性があります。その場合、mysql_*とmysqli拡張機能の両方がfalseを返します。 それぞれのクエリ関数/メソッドから。そのエラー状態をテストし、それに応じて処理する必要があります。

    mysql_*拡張機能

    mysql_関数は非推奨です phpバージョン7で削除されました。

    $resultを確認してください mysql_fetch_arrayに渡す前に 。 falseであることがわかります クエリが失敗したためです。 mysql_queryを参照してください 考えられる戻り値のドキュメントとそれらの処理方法に関する提案。

    $username = mysql_real_escape_string($_POST['username']);
    $password = $_POST['password'];
    $result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");
    
    if($result === FALSE) { 
        die(mysql_error()); // TODO: better error handling
    }
    
    while($row = mysql_fetch_array($result))
    {
        echo $row['FirstName'];
    }
    

    mysqli拡張機能
    手続き型

    $username = mysqli_real_escape_string($mysqli, $_POST['username']);
    $result = mysqli_query($mysqli, "SELECT * FROM Users WHERE UserName LIKE '$username'");
    
    // mysqli_query returns false if something went wrong with the query
    if($result === FALSE) { 
        yourErrorHandler(mysqli_error($mysqli));
    }
    else {
        // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
        foreach( $result as $row ) {
            ...
    

    oo-style

    $username = $mysqli->escape_string($_POST['username']);
    $result = $mysqli->query("SELECT * FROM Users WHERE UserName LIKE '$username'");
    
    if($result === FALSE) { 
        yourErrorHandler($mysqli->error); // or $mysqli->error_list
    }
    else {
        // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
        foreach( $result as $row ) {
          ...
    

    準備されたステートメントの使用:

    $stmt = $mysqli->prepare('SELECT * FROM Users WHERE UserName LIKE ?');
    if ( !$stmt ) {
        yourErrorHandler($mysqli->error); // or $mysqli->error_list
    }
    else if ( !$stmt->bind_param('s', $_POST['username']) ) {
        yourErrorHandler($stmt->error); // or $stmt->error_list
    }
    else if ( !$stmt->execute() ) {
        yourErrorHandler($stmt->error); // or $stmt->error_list
    }
    else {
        $result = $stmt->get_result();
        // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
        foreach( $result as $row ) {
          ...
    

    これらの例は、を示しているだけです。 実行する方法ではなく、実行する必要があります(エラー処理)。本番コードでは、or dieを使用しないでください。 HTMLを出力するとき、そうでない場合は(少なくとも)無効なHTMLを生成します。また、データベースのエラーメッセージは、管理者以外のユーザーには表示しないでください。開示する情報が多すぎます



    1. SQL Server Management Studio(SSMS)でクエリウィンドウを分割する方法-SQL Server/TSQLチュートリアルパート13

    2. MariaDBでのUNIX_TIMESTAMP()のしくみ

    3. PostgreSQL9.3を使用した動的ピボットクエリ

    4. データベースでPIIを分類、検索、マスクする方法…