Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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 准备好的PDO查询返回0个受影响的行_Php_Mysql_Pdo_Prepare - Fatal编程技术网

Php 准备好的PDO查询返回0个受影响的行

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 = $_

我确实花了几个小时在谷歌上搜索,我不知道我做错了什么。我正在使用POST,我自己在phpMyAdmin中尝试了这个查询,它成功了,但在PDO中不起作用,我不知道为什么。当我使用mysql_查询时,它起作用了,但我想保护自己不受SQL注入的影响

以下是我使用的代码:

<?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)可以帮你节省这么多时间。我也会调查一下。谢谢