2015-01-11 131 views
1

所以我们有一张桌子,上面有我们所有的球员和每个球队的桌子。首先,我得到了在这支球队上玩球员的身份证,然后我使用上述身份证来获取所有关于这名球员的信息。 一位朋友现在告诉我,我可以通过使用预准备语句缩短服务器的响应时间。但它不起作用!这是错误消息“致命错误:调用一个成员函数FETCH_ASSOC()在一个非对象的‘地址’上线63”准备好的声明不起作用

$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>"; 
     } 
    } 
} 

有什么不对的代码?

+0

什么是$ SpielerId的 –

+0

尝试的print_r(结果)之前获取@Sebastian –

+0

$ SpielerId的价值值后$stmt->get_result()得到的结果是我想要得到的当前玩家的ID数据。 –

回答

2

您正在添加此功能,但此功能并未用于预处理语句。

$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注入的风险

+1

这是我的朋友告诉我有关准备好的陈述之前我使用的代码的一部分。我想保留它以防我找不到工作解决方案。 –

+0

你从未执行准备好的声明。此外,检查是否有任何行不太常用,因为如果结果为空,while循环将不会运行 – robinp7720

+0

Thx for the help buddy! –

0

准备好的语句的execute函数不会返回与查询相关的结果,而是返回布尔值,以确定是否执行查询。你需要调用$stmt->execute()

+0

不知道。 Thx寻求帮助。它现在有效。 –