2015-01-11 3 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 является идентификатором текущего игрока я хочу получить данные. –

ответ

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 для приятеля помощи! –

0

Функция подготовленного оператора не возвращает результат, связанный с запросом, а вместо этого логический, чтобы определить, был ли запрос выполнен. Вы должны получить результат с $stmt->get_result() после вызова $stmt->execute()

+0

Не знал этого. Thx за помощь. Он работает сейчас. –

Смежные вопросы