gpt4 book ai didi

PHP MySQLi 准备语句无法返回行

转载 作者:行者123 更新时间:2023-12-02 22:32:38 25 4
gpt4 key购买 nike

我一直在将我的很多旧 MySQL 东西转换为 PHP 中的 MySQLi,但在以下代码中遇到了问题:

### FETCH INCLUDES ###
$player=$_POST['player'];
$password=md5($_POST['password']);
#### DB CONNECTION ####
if(!$mysqli=new mysqli(DBHOST,DBUSER,DBPWD,DBNAME)) {$err=$mysqli->error; print($err); }
$sql="SELECT * FROM accounts WHERE name='?' AND passkey='?'";
if($stmt=$mysqli->prepare($sql)) {
//$stmt->bind_param('ss',$player,$password);
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows==1) {
$account=$stmt->fetch_assoc();
// purely for debugging
print_r($account);
if($_SESSION['account']=$account) $account=true;
} else {
echo "Failed. Row count: ";
print($stmt->num_rows);
echo "<br />";
$query=str_replace('?','%s',$sql);
printf($query,$player,$password);
$account=false;
}
$stmt->close();
} else {
$err=$mysqli->error;
print($err);
}

我已将故障缩小到查询本身。我得到 0 行返回,没有错误,所以我想我会输出查询(我要去那里的 str_replace 东西),我可以使用查询从数据库中返回一行,使用来自 PHPMyAdmin 的相同查询

我哪里错了?

编辑

我尝试将查询更改为不绑定(bind)参数的基本查询 - “SELECT * FROM table”仍然没有返回任何行。所以这不是查询本身,而是按照我的准备、执行情况的顺序/格式

第二次编辑:我已将 $stmt->store_result() 添加到代码中,但仍返回 0 行计数。

第三次编辑:我调查了看起来不错的连接和用户设置。我可以使用相同的用户和密码通过控制台连接到数据库,并且数据库名称相同。我真的很难过:(

最佳答案

$stmt->execute(); 之后添加一个 $stmt->store_result();,因为看起来它必须在 $ 之前调用一次stmt->num_rows... 至少他们在示例中这样做(参见 http://php.net/manual/en/mysqli-stmt.store-result.php)。他们指的是“num_rows”文档中的依赖项。

其他想法:你检查 if($stmt->num_rows==1) {,你确定 num_rows 是 0 吗?我不知道表“帐户”的数据库结构。 “名称”是主键(或至少是唯一索引)吗?如果不是,则可能有多个匹配的列。这只是一个快速的想法,可能会出现什么问题,并导致您在源代码中寻找问题的时间。虽然问题出在其他地方。

关于PHP MySQLi 准备语句无法返回行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11978423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com