php - 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”是德语,意思是数据。
解决方案
您的代码存在一些问题:
- 您需要
session_start()
在使用会话之前 - 您错误地使用了准备好的语句
- 您在代码中的错误位置使用了 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"] ;
推荐阅读
- php - 如果时间字段为空,如何将空值发送到数据库表列?
- javascript - 当实时数据将由 FCM 更改时,我如何在 android 中获得通知?
- javascript - javascript 如何将函数从命令式更改为函数式
- kdb - kdb 中当前和指定命名空间中的views[] (\b) 行为
- ssas - 在分析多维数据集中创建计算以按标准生成不同计数
- python-3.x - 尝试运行我的第一个程序时出现无效的语法错误
- laravel - 子路由仍然只加载父组件
- node.js - 不同的输出,相同的线路?
- reactjs - 未捕获的类型错误:在 useState 中存储组件时无法设置未定义的属性“props”
- instagram-api - 如何通过 API 从 Instagram 获取受众兴趣?