Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.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-MySQLi编写的语句_Php_Mysqli - Fatal编程技术网

PHP-MySQLi编写的语句

PHP-MySQLi编写的语句,php,mysqli,Php,Mysqli,因此,上面的代码检查数据库中是否存在$_GET['name'],如果不存在,则重定向到home?errormsg=notfound,但它也会将数据库中存在的用户名重定向到链接“home?errormsg=notfound”。你能提出一个解决这个问题的方法吗?我还没有尝试过这个方法,但可能会有帮助 您正在调用$stmt->store_result()在$stmt->num_行之后 请尝试移动$stmt->store_result()在$stmt->num_行之前 例如。您可以看到您必须在$stmt

因此,上面的代码检查数据库中是否存在$_GET['name'],如果不存在,则重定向到home?errormsg=notfound,但它也会将数据库中存在的用户名重定向到链接“home?errormsg=notfound”。你能提出一个解决这个问题的方法吗?

我还没有尝试过这个方法,但可能会有帮助

您正在调用
$stmt->store_result()
$stmt->num_行之后
请尝试移动
$stmt->store_result()
$stmt->num_行之前


例如。您可以看到

您必须在
$stmt->num_rows
之前调用
$stmt->store_result()

而且您的
$stmt->fetch()
不是必需的,因为您不使用所选数据

如果在
num\u rows
之后调用
store\u result()

部分评论来自:

如果不使用mysqli\u stmt\u store\u result(),则立即调用 此函数在执行准备好的语句后,此函数将 通常返回0,因为它无法知道数据中有多少行 结果集作为结果集尚未保存在内存中

因此您的代码应该如下所示:

$name = $_GET['user'];
if(isset($_GET['user']) && strlen($_GET['user'])>0) {
    $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $db);
    $stmt = $mysqli->prepare("SELECT username FROM users WHERE username=?");
    $stmt->bind_param('s', $name);
    $stmt->execute();
    while($stmt->fetch()) {
        if($stmt->num_rows == 0) {
            header("Location: home?errormsg=notfound");
            exit();
        }
    }
    $stmt->store_result();
    $stmt->close();
}
$mysqli->close();

非常感谢!它解决了我的问题。为什么不用COUNT语句检查是否存在<代码>从用户名为?
的用户中选择COUNT(*)作为uncnt。它的速度与选择用户名本身一样快(然后基本上就扔掉了),并且在语义上更明确地说明了您要做什么。
$name = $_GET['user'];
if(isset($_GET['user']) && strlen($_GET['user'])>0) {
    $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $db);
    $stmt = $mysqli->prepare("SELECT username FROM users WHERE username=?");
    $stmt->bind_param('s', $name);
    $stmt->execute();
    $stmt->store_result();
    if($stmt->num_rows == 0) {
        header("Location: home?errormsg=notfound");
        exit();
    }
    $stmt->close();
}
$mysqli->close();