首页 > 解决方案 > PHP bind_result 不会将值插入数组

问题描述

我有一个问题是 bind_result 不起作用(我认为)。我想要 gamecode、admin、player2 等的值,但它不会将数据插入到数组 daten2 中。我花了很多时间寻找问题,但无法弄清楚。

我使用了相同的代码,只是使用了不同的变量,而且效果很好。

player2、player3 等可能是EMPTY。以防万一这可能是一个问题。

SQL 代码工作正常,我已经在 phpMyAdmin 中对其进行了测试

$mysql = new mysqli("localhost", "root", "password", "name"); 
$mysql->set_charset("utf8");


$spalte = $_SESSION["GamecodeSession"];

$stmt = $mysql->prepare( "SELECT gamecode, admin, player2, player3, player4, player5, player6, player7, player8, player9 FROM room WHERE gamecode='$spalte'");
$stmt->bind_result($daten2[0], $daten2[1], $daten2[2], $daten2[3], $daten2[4], $daten2[5],$daten2[6],$daten2[7],$daten2[8],$daten2[9]);
$stmt->execute();
$stmt->close();

$_SESSION["NicknameAdminSession"] = $daten2[1];
echo "Admin:" . $_SESSION["NicknameAdminSession"] ; //The Session Variable is empty like every other

PS:我为我的英语拼写错误道歉,我不是以英语为母语的人。“daten”是德语,意思是数据。

标签: phpmysqli

解决方案


您的代码存在一些问题:

  1. 您需要session_start()在使用会话之前
  2. 您错误地使用了准备好的语句
  3. 您在代码中的错误位置使用了 bind_result

代码:

<?php
session_start(); //Added

$mysql = new mysqli("localhost", "root", "password", "name"); 
$mysql->set_charset("utf8");


//This takes for granted GamecodeSession is always set    
$spalte = $_SESSION["GamecodeSession"]; 

//Do this instead

$spalte = '';
if (isset($_SESSION["GamecodeSession"])) {
    $spalte = $_SESSION["GamecodeSession"]; 
}

//You should never use value of an variable in the prepared statement:
$stmt = $mysql->prepare( "SELECT gamecode, admin, player2, 
player3, player4, player5, player6, player7, player8, player9 FROM room WHERE 
gamecode='$spalte'");

//Instead do this (placeholder :spalte)
$stmt = $mysql->prepare( "SELECT gamecode, admin, player2, 
player3, player4, player5, player6, player7, player8, player9 FROM room WHERE 
gamecode=?");

//Execute FIRST, then bind_result
//But before executing make sure $spalte value is included
$stmt->bind_param('s', $spalte); //s = string
$stmt->execute();

//Now bind columns to variables (after execution of the actual query)
$stmt->bind_result($daten2[0], $daten2[1], $daten2[2], 
$daten2[3], $daten2[4], $daten2[5],$daten2[6],$daten2[7],
$daten2[8],$daten2[9]);

$stmt->close();

$_SESSION["NicknameAdminSession"] = $daten2[1];
echo "Admin:" . $_SESSION["NicknameAdminSession"] ; 

推荐阅读