1

私はmysqliが初めてで、以下のように関数を書きました。

1 -SELECT *クエリの方法が見つからず、bind_result各列の値を同じ名前の変数に割り当てる必要がありました。(例: name#row の列の値は に格納されます$name)

クエリbind_result()には機能がないと思いますか?SELECT *

2 -すべての行をフェッチし、ループを介して手動で適切な変数に割り当てるという別のオプションを試しました。ループには$query->fetch_all()orを使用する必要があると思いますが、これに遭遇しました:$query->fetch_assoc()

Fatal error: Call to undefined method mysqli_result::fetch_all()

また

Fatal error: Call to undefined method mysqli_result::fetch_assoc()

ただし、phpinfo()mysqlndが有効になっており、phpバージョンが5.4.7(XAMPP v1.8.1を実行)であることがわかりました

そして3-最終的に私がしたことは、どちらも機能しないアイデアの下にあります。

function the_names($name)
{
    global $db;
    if($query = $db->prepare("SELECT * FROM users where name=?"))
    {
        $query->bind_param('s', $name);
        if($query->execute())
        {
            $query->store_result();
            if($query->num_rows > 1)
            {
                while($row = $query->fetch())
                {
                    echo $row['name']; // Here is the problem
                }
            }
            else
                echo "not valid";
            $query->close();
        }
    }
}

フェッチされたすべてのデータを保存する方法bind_result()、または後で使用するためにそれらを配列に格納する方法が必要であり、両方を知っている方がはるかに優れています。tnx

4

2 に答える 2

1

一度にすべての質問に答える一言 - PDO
mysqli から取得しようとしているものがすべて含まれています (無駄に):

function the_names($name)
{
    global $db;
    $query = $db->prepare("SELECT * FROM users where name=?");
    $query->execute(array($name));
    return $query->fetchAll();
}

$names = the_names('Joe');
foreach ($names as $row) {
    echo $row['name'];
}

関数の適切な使用方法に注意してください。何もエコーすることはありませんが、将来の使用のためにデータを返すだけです

于 2013-04-11T14:58:53.813 に答える
0

mysqli コードにない場合は、次のbinding_param()ようなコードを記述できます。

$mysqli = new mysqli("localhost" , "root" , "" , "database_name");
$result = $mysqli->query( "SELECT * FROM users where name=" . $name) ;
while ( $row =  $result->fetch_assoc() ) {
    echo $row["name"];
}

codeを使用する場合はbinding_param()、設定する必要もありますbind_result()

$db = new mysqli("localhost" , "root" , "" , "database_name");
function the_names($name){
    global $db;


    /* Prepared statement, stage 1: prepare */
    if (!($query = $db->prepare("SELECT * FROM users where name=?"))) { # prepare sql
    echo "Prepare failed: (" . $db->errno . ") " . $db->error;
    }


    /* Prepared statement, stage 2: bind and execute */
    if (!$query->bind_param("s", $name)) { # giving param to "?" in prepare sql
        echo "Binding parameters failed: (" . $query->errno . ") " . $query->error;
    }

    if (!$query->execute()) {
        echo "Execute failed: (" . $query->errno . ") " . $query->error;
    }


    $query->store_result(); # store result so we can count it below...
    if( $query->num_rows > 0){ # if data more than 0 [ that also mean "if not empty" ]

        # Declare the output field of database
        $out_id    = NULL;
        $out_name  = NULL;
        $out_age   = NULL;
        if (!$query->bind_result($out_id, $out_name , $out_age)) {
            /* 
             * Blind result should same with your database table !
             * Example : my database
             * -users
             * id   (  11     int )
             * name ( 255  string )
             * age  (  11     int )
             * then the blind_result() code is : bind_result($out_id, $out_name , $out_age)
             */
            echo "Binding output parameters failed: (" . $query->errno . ") " . $query->error;
        }

        while ($query->fetch()) {
            # print the out field 
            printf("id = %s <br /> name = %s <br /> age = %s <br />", $out_id, $out_name , $out_age);
        }

    }else{
        echo "not valid";
    }

}
the_names("panji asmara");

参照 :

http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

于 2014-10-21T03:47:25.823 に答える