我只是学习PHP而且我认为学习一些MySQL也是个好主意。所以我开始研究代码,但由于一些奇怪的原因,我不断收到重复的用户,这真的很糟糕。< / p>
<?php
$link = mysqli_connect(here i put the data);
if(!$link)
{
echo "Error: " . mysqli_connect_errno() . PHP_EOL;
exit;
}
else
{
if(isset($_POST['user']))
{ echo "User set! "; }
else { echo "User not set!"; exit; }
if(isset($_POST['pass']) && !empty($_POST['pass']))
{ echo "Password set! "; }
else { echo "Password not set!"; exit; }
$num = mysqli_num_rows(mysqli_query("SELECT * FROM `users` WHERE ( username = "."'".$_POST['user']."' )"));
if($num > 0)
{ echo "Cannot add duplicate user!"; }
mysqli_close($link);
}
?>
由于一些奇怪的原因,我没有得到我应该得到的输出。我已经尝试了一些在StackOverflow上找到的解决方案,但它们没有用。
答案 0 :(得分:3)
connectionObject
中未提供$num = mysqli_num_rows(mysqli_query($link, "SELECT * FROM `users` WHERE ( `username` = '".$_POST['user']."' )"));
//----------------------------------^^^^^^^
的第一个参数:
$_POST['user'] = mysqli_real_escape_string($link, $_POST['user']);
此外,您的代码易受SQL注入攻击。一个简单的解决方案是:
model: {
name: {type: String, required: true, es_indexed: true, index: 'not_analyzed'},
aliases: {type: [String], es_indexed: true, index: 'not_analyzed'},
birth: {type: Date, es_type: 'date', es_indexed: true, index:
},
答案 1 :(得分:1)
mysqli_query
必须收到两个参数才能正常工作。在这种情况下,您的mysqli_connect
。
$num = mysqli_num_rows(mysqli_query($link, "SELECT * FROM `users` WHERE ( username = "."'".$_POST['user']."' )"));
此外,在此代码中,您可能会受到SQL注入的影响。
决不直接在查询中添加用户输入而不过滤它们。
这样做可以使您的查询更具可读性和安全性:
$u_name=mysqli_real_escape_string($link, $_POST['user']);
$num = mysqli_num_rows(mysqli_query($link, "SELECT * FROM `users` WHERE ( username = '$u_name' )"));
答案 2 :(得分:1)
要使用mysqli_*
扩展名,您必须在所有查询的参数中包含您的连接。
$query = mysqli_query($link, ...); // notice using the "link" variable before calling the query
$num = mysqli_num_rows($query);
或者,你可以做的是在你的网站中创建一个query()
功能,如下所示:
$link = mysqli_connect(...);
function query($sql){
return mysqli_query($link, $sql);
}
然后像这样调用它:
query("SELECT * FROM...");
答案 3 :(得分:1)
这可能是竞争条件的问题。
想象一下,两个用户想要同时创建相同的用户名。 两个进程将执行您的脚本。因此,两个脚本都从数据库中进行选择,并发现没有用户具有所需的用户名。然后,都插入用户名。
最佳解决方案是在数据库中的用户名列上创建唯一索引。
ALTER TABLE users ADD unique index username_uix (username);
然后尝试插入用户,如果失败,则表示用户名存在...
答案 4 :(得分:0)
以下是使用预准备语句和错误检查编写代码的方法。
还使用<Style TargetType="DataGridRow">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="DarkGray" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="White"/>
</Style.Resources>
</Style>
查找用户数量,而不是依赖SELECT COUNT(*)...
。这将从数据库返回更少的数据,看起来更干净。
mysqli_num_rows
请建议修改语法,这是从手机输入的