2015-01-11 206 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尋求幫助。它現在有效。 –