Php 准备好的PDO查询返回0个受影响的行
我确实花了几个小时在谷歌上搜索,我不知道我做错了什么。我正在使用POST,我自己在phpMyAdmin中尝试了这个查询,它成功了,但在PDO中不起作用,我不知道为什么。当我使用mysql_查询时,它起作用了,但我想保护自己不受SQL注入的影响 以下是我使用的代码:Php 准备好的PDO查询返回0个受影响的行,php,mysql,pdo,prepare,Php,Mysql,Pdo,Prepare,我确实花了几个小时在谷歌上搜索,我不知道我做错了什么。我正在使用POST,我自己在phpMyAdmin中尝试了这个查询,它成功了,但在PDO中不起作用,我不知道为什么。当我使用mysql_查询时,它起作用了,但我想保护自己不受SQL注入的影响 以下是我使用的代码: <?php if(isset($_POST['user']) and isset($_POST['pass'])) { $name = $_POST['user']; $pass = $_
<?php
if(isset($_POST['user']) and isset($_POST['pass'])) {
$name = $_POST['user'];
$pass = $_POST['pass'];
$db = new PDO('mysql:host=localhost;dbname=*****;charset=utf8', '*****', '*****');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = $db->prepare("SELECT * FROM stored WHERE _User LIKE :username AND _Pass LIKE :password");
$query->bindValue(":username", $user, PDO::PARAM_STR);
$query->bindValue(":password", $pass, PDO::PARAM_STR);
$query->execute();
echo $query->rowCount();
}
?>
要么您使用的是古老版本的PHP,要么您的数据库中没有符合条件的行。第一次升级,第二次检查数据和查询 另外,正如Holy Linus对我们说的,“说话很便宜,让我看看代码”。
不要告诉我们“当我使用无聊的查询时,它起作用了”运行它。在同一个文件中,在代码旁边。这样你就有了一个证明。只有这样一个证明才重要,而你的猜测却不重要 但是,严格地说,您根本不需要这个函数,也不需要大部分代码
$stmt = $db->prepare("SELECT 1 FROM stored WHERE _User = ? AND _Pass = ?");
$stmt->execute(array($_POST['user'],$_POST['pass']));
echo $stmt->fetchColumn();
足够了。看起来您在第41行命名用户名变量$name,但当您在第46行绑定参数时,您将其称为$user。
对于大多数数据库,PDOStatement::rowCount()不会返回受SELECT语句影响的行数。相反,请使用PDO::query()发出一个SELECT COUNT(*)语句,该语句的谓词与预期的SELECT语句相同,然后使用PDO语句::FETCHTCOLUMN()检索将返回的行数。然后,您的应用程序可以执行正确的操作。
请将代码复制到中。让人们更容易地帮助你:)除了所有其他问题,你到底是从哪里想到使用LIKE进行字符串比较的?@Akam它确实返回了受影响的行数,因为我以前修改过该语句,它返回了我预期的行数。我甚至无法发布代码,因为此网站的格式不好,并且会出错。我如何升级?联系我的网络主机?我已经测试了这个查询,它已经在phpMyAdmin中运行了。升级之前,您需要知道是否存在问题。你所有的行动都是基于一个简单的假设。为什么不让自己理解问题,然后才开始解决问题呢?不管怎样,这是一个愚蠢的打字错误,是由于缺乏错误报告造成的。嗯,我是个智障。就是这样,你是个天才。我想我应该更加注意保持一致性。非常感谢你结束了我长达数小时的艰苦寻找,因为这是我的错。我终于可以睡觉了。再次感谢。@TidasBay一个简单的错误报告(E\u ALL)代码>可以帮你节省这么多时间。我也会调查一下。谢谢