php - 准备好的声明不起作用

标签 php mysql sql mysqli prepared-statement

所以我们有一张 table ,上面有我们所有的球员,还有一张 table ,每个球队都有。首先,我得到了在这支球队打球的球员的 ID,然后我使用所说的 Id 来获取关于这个球员的所有信息。 一位 friend 现在告诉我,我可以通过使用准备好的语句来减少服务器响应时间。但它不起作用!这是错误消息“ fatal error :在第 63 行的“地址”中的非对象上调用成员函数 fetch_assoc()”

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$stmt = $conn->prepare("SELECT Vorname, Nachname, Bild FROM Spieler WHERE Id IN (?)");
$stmt->bind_param("i", $SpielerId);
$sql1 = "SELECT Id, SpielerId FROM 2Herren";
$list = $conn->query($sql1);
if ($list->num_rows > 0) {
    while ($rowlist = $list->fetch_assoc()) {
        $SpielerId = $rowlist["SpielerId"];
//        $sql2 = "SELECT Vorname, Nachname, Bild FROM Spieler WHERE Id IN ($SpielerId)";
//        $result = $conn->query($sql2);
        $result = $stmt->execute();
        while ($data = $result->fetch_assoc()) { //Line 63
            echo "<tr><td>" . $rowlist["Id"] . "</td><td>" . $data["Vorname"] . " " . $data["Nachname"] ."</td><td><img style='max-width: 100px; max-heigth: 100px;' src='" . $data["Bild"] . "'></td></tr>";
        }
    }
}

这段代码有什么问题?

最佳答案

您正在添加它,并且它不用于准备好的语句。

$sql1 = "SELECT Id, SpielerId FROM 2Herren";
$list = $conn->query($sql1); 

您还必须使用以下命令执行并运行获取结果:

//Execute prepared statment
$stmt->execute();
//Get result as assoc_array
$result = $stmt->get_result();

应该是这样的:

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$stmt = $conn->prepare("SELECT Id, Vorname, Nachname, Bild FROM Spieler WHERE Id = ?");
$stmt->bind_param("i", $SpielerId);

//Execute prepared statment
$stmt->execute();
//Get result as assoc_array
$result = $stmt->get_result();
//Loop through every entry
while ($rowlist = $result->fetch_assoc()) {
    var_dump($rowlist);
}

准备好的语句也不会更快。它们只是更安全,并将 sql 注入(inject)的风险降到最低

关于php - 准备好的声明不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27888335/

相关文章:

php - 反色情图片上传

php - 使用 CodeIgniter 进行 SQL 查询时出现问题

mysql - 存储自定义 MySQL 元数据 - 最佳实践

mysql - 连接具有相同列号和名称的两个表

php - 函数名前面的 & 的作用是什么?

php - 当其中一个键被赋值时,数组是否在 PHP 中隐式创建?

mysql - 为什么 MYSQL 错误 1406 列数据太长?

php - NOW() BETWEEN date_from AND date_to 不工作?

sql - ORA-00904: : 无效标识符

sql - 我正在尝试复制文件,但收到错误消息