查询为 TRUE 当它不是
Posted
技术标签:
【中文标题】查询为 TRUE 当它不是【英文标题】:Query is TRUE when its not 【发布时间】:2019-10-26 03:16:08 【问题描述】:请对我温柔一点,我最近刚刚尝试学习 php/SQL。
问题是第一个查询在不应该时总是为真(基于我所知道的)。
查询只是声明获取用户提供的“用户名”,其中 betakey=$betakey。除了 betakey 列之外,我的数据库列仍然为空这一事实根本不会使该查询语句为真。
请帮忙,也许我缺少这方面的一些知识。
<?php
header('Access-Control-Allow-Origin: *');
$firstName = $_GET['rfirstname'];
$lastName = $_GET['rlastname'];
$username = $_GET['rusername'];
$password = $_GET['rpass'];
$betakey = $_GET['rkey'];
$host="localhost"; // Host name
$db_username="**"; // mysql username
$db_password="**"; // Mysql password
$db_name="**"; // Database name
$conn = mysqli_connect("$host", "$db_username", "$db_password","$db_name");
if (!$conn)
die ("Error: ".mysqli_connect_error());
$query1 = "SELECT username='$username' FROM users2 WHERE betakey='$betakey';";
$result_1 = mysqli_query($conn,$query1);
if(mysqli_num_rows($result_1) > 0)
echo 'Beta key is used';
else
$query2 = "UPDATE users2 SET firstName='$firstName',lastName='$lastName',username='$username',password='$password' WHERE betakey='$betakey'";
echo 'Registration Successful';
mysqli_close($conn);//Close off the MySQL connection to save resources.
?>
【问题讨论】:
您的第一个查询应该只是SELECT username FROM users2 WHERE betakey='$betakey';
除了查询中的错字;该代码是如此不安全和危险,几乎吓到我了。
您也从未执行过更新查询,因此也属于印刷错误。
@ catcon,我已经尝试过该查询,但结果仍然相同.. 稍加跟进,我尝试在 sql 中运行查询,结果是用户名列,但为空白。这算作 mysqli_num_rows 计数吗?,
【参考方案1】:
您的代码中有很多问题。让我帮你解决一些问题
你应该学习how to properly open mysqli connection。您需要启用错误报告并设置正确的字符集。
永远不要将 PHP 变量连接到 SQL 查询中。始终使用 parameterized prepared statements 而不是手动构建查询。
您的第一个 SQL 查询出错。 username='$username'
毫无意义且错误。如果您只想check existence use COUNT(1)
或类似的东西。
这是我对您的固定代码的看法:
<?php
header('Access-Control-Allow-Origin: *');
$firstName = $_GET['rfirstname'];
$lastName = $_GET['rlastname'];
$username = $_GET['rusername'];
$password = $_GET['rpass'];
$betakey = $_GET['rkey'];
$host = "localhost"; // Host name
$db_username = "**"; // Mysql username
$db_password = "**"; // Mysql password
$db_name = "**"; // Database name
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn = new mysqli($host, $db_username, $db_password, $db_name);
$conn->set_charset('utf8mb4');
$stmt = $conn->prepare("SELECT COUNT(username) FROM users2 WHERE betakey=?");
$stmt->bind_param('s', $_GET['rusername']);
$stmt->execute();
$result_1 = $stmt->get_result();
$used = $result_1->fetch_row()[0];
if ($used)
echo 'Beta key is used';
else
$stmt = $conn->prepare("UPDATE users2 SET firstName=?, lastName=?, username=?, password=? WHERE betakey=?");
$stmt->bind_param('sssss', $firstName, $lastName, $username, $password, $betakey);
$stmt->execute();
echo 'Registration Successful';
【讨论】:
以上是关于查询为 TRUE 当它不是的主要内容,如果未能解决你的问题,请参考以下文章
Python:有没有办法让 swipl 查询产生值 true 而不是 ?