Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.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和mysql查询测试数据库是否为空?_Php_Mysql_Mysqli - Fatal编程技术网

如何通过php和mysql查询测试数据库是否为空?

如何通过php和mysql查询测试数据库是否为空?,php,mysql,mysqli,Php,Mysql,Mysqli,我有一个空的用户数据库 在创建用户id之前,我想对代码做的第一件事是检查用户id是否存在 我遇到以下错误:尝试获取非对象的属性“num_rows” 我接受了我的查询并在mysql上提交了它,但没有返回任何内容 我的HTML提交表格: <form action="index.php" method="post" autocomplete="off"> <input type="text" name="username" placeholder="Username" /> &

我有一个空的用户数据库

在创建用户id之前,我想对代码做的第一件事是检查用户id是否存在

我遇到以下错误:尝试获取非对象的属性“num_rows”

我接受了我的查询并在mysql上提交了它,但没有返回任何内容

我的HTML提交表格:

<form action="index.php" method="post" autocomplete="off">
<input type="text" name="username" placeholder="Username" />
<input type="password" name="password" placeholder="Password" />
<input type="submit" value="Login" />
</form>

测试完成后,它将提交我的查询以创建用户帐户。

重新编写以使用正确的语法,如下所示:

$stmt = $conn->prepare("SELECT count(*) FROM users WHERE user_name = ?");
$stmt->bind_param('s', $username);

$result = $stmt->execute();

if ($result)
{
    return $result->fetch_assoc();
} else {
    return $conn->num_rows;
}

也就是说,希望这是一个学术练习,因为编写自己的登录系统供生产使用是极其危险的。使用具有内置安全层的框架作为应用程序基础。< / P>可能的重复代码,您可以在将NothRION作为对象获取并获得此错误时添加代码:尝试获取非对象的属性“NUMLROWS”,查询无效。SCONTROND。警告:编写自己的访问控制层并不容易,而且有很多。有机会犯严重错误。请不要编写您自己的身份验证系统,因为任何现代的同类产品都具有强大的内置功能。至少,请遵循并永远不要将密码存储为纯文本或弱散列(如SHA1或MD5)。我认为您这样说是因为人们使用的旧指南显示了真正过时的代码,并且/或者没有遵循使您的登录安全、易于sql注入等所需的过程。。?如果不是的话,我真的很感兴趣,如果你碰巧知道为什么构建自己的登录系统是非常危险的。@Chris我这么说是因为现在威胁的数量要高得多,因为有自动工具来探测和利用网站,这些网站可以被不熟练的攻击者使用。这些代码中有很多是在20世纪90年代出现的,当时的威胁要少得多,也不那么复杂。你必须面对的挑战是巨大的,你自己去做基本上是不可能的。使用预先存在、经过测试并受支持的身份验证系统是至关重要的。@Chris如果您使用流行的系统,例如Laravel,那么您的站点第一个遇到新漏洞的可能性非常低,您的安全性是非常高的。在大多数情况下,你会得到有关CVE的通知,并有时间在成为目标之前进行修补。这与您的自建系统不同,您是任何攻击的第一个也是唯一的目标。你只有在被妥协后才能发现。
$stmt = $conn->prepare("SELECT count(*) FROM users WHERE user_name = ?");
$stmt->bind_param('s', $username);

$result = $stmt->execute();

if ($result)
{
    return $result->fetch_assoc();
} else {
    return $conn->num_rows;
}