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

bind_resultとget_resultの使用方法の例

    私にとって決定的な要因は、*を使用してクエリ列を呼び出すかどうかです。 。

    bind_result()の使用 これにはもっと良いでしょう:

    // Use bind_result() with fetch()
    $query1 = 'SELECT id, first_name, last_name, username FROM table WHERE id = ?';
    

    get_result()の使用 これにはもっと良いでしょう:

    // Use get_result() with fetch_assoc() 
    $query2 = 'SELECT * FROM table WHERE id = ?';
    

    $query1の例1 bind_result()を使用する

    $query1 = 'SELECT id, first_name, last_name, username FROM table WHERE id = ?';
    $id = 5;
    
    if($stmt = $mysqli->prepare($query)){
       /*
            Binds variables to prepared statement
    
            i    corresponding variable has type integer
            d    corresponding variable has type double
            s    corresponding variable has type string
            b    corresponding variable is a blob and will be sent in packets
       */
       $stmt->bind_param('i',$id);
    
       /* execute query */
       $stmt->execute();
    
       /* Store the result (to get properties) */
       $stmt->store_result();
    
       /* Get the number of rows */
       $num_of_rows = $stmt->num_rows;
    
       /* Bind the result to variables */
       $stmt->bind_result($id, $first_name, $last_name, $username);
    
       while ($stmt->fetch()) {
            echo 'ID: '.$id.'<br>';
            echo 'First Name: '.$first_name.'<br>';
            echo 'Last Name: '.$last_name.'<br>';
            echo 'Username: '.$username.'<br><br>';
       }
    
       /* free results */
       $stmt->free_result();
    
       /* close statement */
       $stmt->close();
    }
    
    /* close connection */
    $mysqli->close();
    

    $query2の例2 get_result()を使用する

    $query2 = 'SELECT * FROM table WHERE id = ?'; 
    $id = 5;
    
    if($stmt = $mysqli->prepare($query)){
       /*
            Binds variables to prepared statement
    
            i    corresponding variable has type integer
            d    corresponding variable has type double
            s    corresponding variable has type string
            b    corresponding variable is a blob and will be sent in packets
       */
       $stmt->bind_param('i',$id);
    
       /* execute query */
       $stmt->execute();
    
       /* Get the result */
       $result = $stmt->get_result();
    
       /* Get the number of rows */
       $num_of_rows = $result->num_rows;
    
    
    
       while ($row = $result->fetch_assoc()) {
            echo 'ID: '.$row['id'].'<br>';
            echo 'First Name: '.$row['first_name'].'<br>';
            echo 'Last Name: '.$row['last_name'].'<br>';
            echo 'Username: '.$row['username'].'<br><br>';
       }
    
       /* free results */
       $stmt->free_result();
    
       /* close statement */
       $stmt->close();
    }
    
    /* close connection */
    $mysqli->close();
    

    ご覧のとおり、bind_resultは使用できません *を使用 。ただし、get_result 両方で機能しますが、bind_result よりシンプルで、$row['name']で混乱を解消します。 。

    bind_result()

    長所:

    • シンプル
    • $row['name']をいじる必要はありません
    • fetch()を使用します

    短所:

    • *を使用するSQLクエリでは機能しません

    get_result()

    長所:

    • すべてのSQLステートメントで機能します
    • fetch_assoc()を使用します

    短所:

    • 配列変数をいじる必要があります$row[]
    • それほどきちんとしていない
    • MySQLネイティブドライバーが必要です( mysqlnd


    1. MYSQLLIMITキーワードに代わるANSISQLはありますか?

    2. 参加の排除:SQLServerが不要なテーブルを削除する場合

    3. SQLDiagツールを使用してパフォーマンスデータを収集する| SQLServerのパフォーマンスのトラブルシューティング-6

    4. 特定の場所にデータベースを備えたAndroidSQLiteデータベースは可能ですか?