我想知道为什么它不适用于mysqli eventhou mysql_num_row正在工作。
if (mysql_num_rows($rows) > 0) {
echo "<p>That name has been taken </p>";
}
那是mysql。但是,我尝试将其转换为mysqli。
if (mysqli_num_rows($rows) > 0) {
echo "<p>That name has been taken </p>";
}
它应该显示在屏幕上,但事实并非如此。而且没有任何错误消息显示。还是我想念什么?有什么想法吗?
首先,关于mysql_*
和mysqli_*
函数之间某些差异的快速教程。
在mysql_*
中,您将有3个用于DB连接的参数,然后有一个单独的DB选择。
例如:
$db = mysql_connect("host","username", "password");
$db_selected = mysql_select_db('db_name', $db);
if (!$db_selected) {
die ('Can't use this : ' . mysql_error());
}
您的查询将首先出现,然后是您的数据库连接。
例如:
mysql_query($query,$db);
,但是在mysqli_*
中发生了变化,包括参数位置。现在,您将所有4个参数放置(如果还没有这样做):
$db = new mysqli("host","username", "password", "db_name");
if (mysqli_connect_errno()) {
printf("Connect failed: %sn", mysqli_connect_error());
exit();
}
然后DB连接将首先出现,然后是查询,而不是相反:
mysqli_query($db,$query);
样本查询:
$email = mysqli_real_escape_string($db,$_POST['email']);
$query = mysqli_query($db, "SELECT * FROM table_name WHERE email='".$email."'");
if(mysqli_num_rows($query) > 0){
echo "email already exists";
}else{
$sql="INSERT INTO table_name (email) VALUES ('$email')";
if (!mysqli_query($db,$sql))
{
die('Error: ' . mysqli_error($db));
}
}
您可以尝试此代码:
$connect = new mysqli("localhost", "user", "password", "database");
$query = "SELECT name FROM table";
$statement= mysqli_prepare($connect, $query)
mysqli_stmt_execute($statement);
mysqli_stmt_store_result($statement);
if (mysqli_stmt_num_rows($statement) > 0) {
echo "<p>That name has been taken </p>";
}
mysqli_stmt_close($statement);
mysqli_close($connect);