Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP准备的语句查询第二次不起作用_Php_Mysql_Prepared Statement - Fatal编程技术网

PHP准备的语句查询第二次不起作用

PHP准备的语句查询第二次不起作用,php,mysql,prepared-statement,Php,Mysql,Prepared Statement,因此,我正在使用PHP并准备发送到MySQL数据库的语句。我遇到了一个无法调试的问题。这是我的密码: //检查输入用户名是否在数据库中 $stmtQuery=从更新的播放器中选择*,其中播放器=?;; $preparedStmt=$dbc->prepare$stmtQuery; $preparedStmt->bind_参数,$setUsername; $preparedStmt->execute; $preparedStmt->bind_result$resultuid$resultUsern

因此,我正在使用PHP并准备发送到MySQL数据库的语句。我遇到了一个无法调试的问题。这是我的密码:

//检查输入用户名是否在数据库中 $stmtQuery=从更新的播放器中选择*,其中播放器=?;; $preparedStmt=$dbc->prepare$stmtQuery; $preparedStmt->bind_参数,$setUsername; $preparedStmt->execute; $preparedStmt->bind_result$resultuid$resultUsername; $preparedStmt->fetch; //如果不是,请关闭页面。 如果$resultuid==null{ 不准确的 } $stmtQuery=选择密码,从UUID=?;的登录中选择密码?;; 回声“flag1”; $preparedStmt=$dbc->prepare$stmtQuery; 回声“flag2”; $preparedStmt->bind_参数,$resultuid;
回声“flag3” 我建议你应该开始使用PDO。。。我在多年前准备的mysqli声明中遇到了一些问题。从那时起,当一次处理多个查询时,PDO就不再让我头疼了

你应该试试PDO效率更高

或者,如果需要其他解决方案,您可以执行以下操作

//Close connection
$preparedStmt->close();

//AND OPEN YOUR CONNECTION AGAIN TO PREPARE NEW QUERIES..

$stmtQuery = "SELECT Password, Salt FROM logins WHERE UUID=?;";
echo 'flag1 ';
$preparedStmt = $dbc->prepare($stmtQuery);
echo 'flag2 ';
$preparedStmt->bind_param("s", $resultUUID);
echo 'flag3 ';

我认为在将变量用于另一个查询之前,需要先关闭准备好的语句:

$preparedStmt->close();

或者在第二个查询中使用另一个变量名,如$preparedStmt2。

您应该能够使用类似以下内容的单个select语句:

SELECT u.UUID, u.Username, l.Password, l.Salt 
    FROM updatedplayers AS u 
    JOIN logins AS l ON (u.UUID = l.UUID) 
    WHERE u.Player = ?
检查字段名的大小写,确保它们与数据库匹配

在文件顶部,添加ini\u set'display\u errors',1;。如果您有任何PHP错误,将显示它们。还要检查数据库调用的返回值并使用错误显示功能。

因此,添加ini\u set'display\u error',1;,由@user2182349建议,给了我更多的见解,我得到了一个致命的错误:调用一个成员函数bind_param on boolean

之后,我尝试添加mysqli_REPORT mysqli_REPORT_ALL;,这导致查询/准备语句中没有使用索引

我这样做是为了意识到这不是一个问题,只是MySQLI报告不必要的错误,这就是我要求它做的lol。为了获得更好、更深刻的堆栈跟踪,我使用MySQLI_reportMYSQLI_REPORT_ERROR | MySQLI_REPORT_STRICT

这使命令失去同步;现在无法运行此命令。再次教我使用$preparedStmt->store_result;,以允许运行另一个准备好的语句


非常感谢大家的帮助,希望这也能帮助到其他人。

mysqli驱动程序具有错误报告功能。尝试在每个DB交互中使用它。可能还想查看更多mysqli错误报告选项。错误报告是否成功?@chris85我目前没有时间填写。后天我有时间,然后再给你打电话这并没有回答问题,这是一种可能有效也可能无效的替代方法。我在这里编辑了我的答案。。。为了其他的解决方案但对我来说。。答案是使用PDO。。。我以前曾修补过替代解决方案,但效果不好……我知道情况并非如此,因为我已经编写了多份准备好的声明,而不必在每一份声明之后关闭它:/根据手册,请参见示例3多次执行,没有闭包。@chris85..INSERT不同于SELECT。。。我多次插入都没有问题。。但我在多次选择时遇到了困难。。。。这就是我转向使用PDO的原因。@victor请看正在使用的函数。这是相同的。@chris85。。是的,但是不同的桌子。。。我在使用MySQLi的时候就遇到了这个问题。。一直在寻找答案,但没有得到任何运气。。。所以我不得不重新构建我的库来使用PDO。。而且PDO很甜。。我使用PDO已经4年了…谢谢你,一旦有机会,我会尝试一下,我会回来和你在一起。