1

私はこのPHP関数を持っています:

function userParent($Username)
{
global $con;
$Result = mysqli_query($con, "SELECT Username FROM Family WHERE Parent = '$Username' LIMIT 10");
$row = mysqli_fetch_assoc($Result);
return $row; 
}

その関数は配列に10行を与えるはずですが、配列に値があるのはなぜですか? 関数ブラケットの外側のコードをテストし、次のように WHILE ループを追加しようとしました:

while ($row = mysqli_fetch_assoc($Result)){
    print_r($row);
}

そしてそれは動作します。10行を配列形式で取得しました。ただし、結果を画面に出力します。関数で返すことができるように変数として作成する方法は?

ありがとう。

更新:フィルの答えによると、ここに私の完全なコードがあります:

<?php
function userParent(mysqli $con, $username) {
    $stmt = $con->prepare('SELECT Username FROM Family WHERE Parent = ? LIMIT 10');
    $stmt->bind_param('s', $username);
    $stmt->execute();
    $res = $stmt->get_result();
    return $res->fetch_all(MYSQLI_ASSOC);
}

$DbServer = 'localhost';
$DbUser = 'username';
$DbPassword = 'password';
$DbName = 'dbname';
$mysqli = new mysqli($DbServer, $DbUser, $DbPassword, $DbName);

$arrayParent = userParent($mysqli, 'root');
print_r($arrayParent);

?>

しかし、私はこのエラーメッセージを受け取りました:

致命的なエラー: 6 行目の /home/myhome/public_html/test.php の未定義メソッド mysqli_stmt::get_result() の呼び出し

4

2 に答える 2

2

mysqli_result::fetch_all代わりに試す

function userParent(mysqli $con, $username) {
    $stmt = $con->prepare('SELECT Username FROM Family WHERE Parent = ? LIMIT 10');
    if ($stmt === false) {
        throw new Exception($con->error, $con->errno);
    }
    $stmt->bind_param('s', $username);
    $stmt->execute();
    $res = $stmt->get_result();
    return $res->fetch_all(MYSQLI_ASSOC);
}

次に、このように呼び出します

$parents = userParent($mysqli, 'some username');

準備されたステートメントとパラメーターのバインディングを認識していない場合は、これらをお読みください

アップデート

どうやら (文書化されていない)、このメソッドはドライバーmysqli_stmt::get_result()を使用している場合にのみ使用できます。mysqlndこのドライバーを使用できない場合は、この代替手段を試してください

function userParent(mysqli $con, $username) {
    $stmt = $con->prepare('SELECT Username FROM Family WHERE Parent = ? LIMIT 10');
    if ($stmt === false) {
        throw new Exception($con->error, $con->errno);
    }

    $stmt->bind_param('s', $username);
    $stmt->execute();

    $parent = null;
    $parents = array();
    $stmt->bind_result($parent);
    while($stmt->fetch()) {
        $parents[] = $parent;
    }
    return $parents;
}
于 2013-04-19T04:43:50.300 に答える