-1

mysqlコンソールにはこれがあります

mysql> SELECT `name`, `lastname` FROM `tblStudents` WHERE `idStudent`='2';
+--------------+-----------------+
|     name     |    lastname     |
+--------------+-----------------+
|     Lucio    |    Martínez     |
+--------------+-----------------+
1 row in set (0.00 sec)

そこで、PHP の準備済みステートメントを使用して、この学生の名前と姓を取得したいと考えています。

これはコードです:

$mysqli = $this->ConnectLowPrivileges();
echo 'Connected<br>';
$stmt = $mysqli->prepare("SELECT `name`, `lastname` FROM `tblStudents` WHERE `idStudent`=?");
if (false==$stmt){
    die('prepare() failed: ' . htmlspecialchars($mysqli->error));
}
$id = 2;
if ($rc = $stmt->execute(array($id))){
    if ($row = $stmt->fetch()){
        echo "Name: {$row[0]}.<br>Last name: {$row[1]}.<br>";
        echo 'Another way:'.print_r($row);
    }
}
if (false==$rc){
    die('execute() failed: ' . htmlspecialchars($stmt->error));
}
echo 'done';
mysqli_close($mysqli);
return true;

2 番目の条件は false を返し、得られる出力は次のとおりです。

Connected
execute() failed: 

PHP は問題なくデータベースに接続できます。

$stmt->error何も返さないため、正確なエラーを知ることはできません。

4

1 に答える 1

0

これ以上のコメントを避けるために、質問に投稿したすべてのコメントとリンクを読んで理解し、コードを次のように変更します。

$mysqli = $this->ConnectLowPrivileges();
echo 'Connected<br>';
$stmt = $mysqli->stmt_init();
$stmt->prepare("SELECT `name`, `lastname` FROM `tblStudents` WHERE `idStudent`=?");

$id = 2;
$stmt->bind_param('i', $id);
if ($stmt->execute()){
    $stmt->bind_result($name, $lastname);
    if ($stmt->fetch()){
        echo "Name: {$name}<br>Last name: {$lastname}<br>";
        //echo 'Another way:'.print_r($row, true); //won't work with bind_result
    } else {
        echo "No results";
    }
} else {
    die('execute() failed: ' . htmlspecialchars($stmt->error));
}
echo 'done';
stmt->close();
$mysqli->close();
于 2013-04-01T20:39:46.010 に答える