我正在使用PHP过程mysqli语法编写带有预处理语句的登录脚本。这是我目前的代码:
<?php
include "/ssincludes/functions.php";
$host = HOST;
$username = USER;
$password = PASSWORD;
$db_name = DATABASE;
$table = TABLEU;
//These includes and constants are fine I checked them all
$con = mysqli_connect($host, $username, $password, $db_name);
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$myusername='test';
$mypassword='password1';
$sql="SELECT * FROM $table WHERE user_name=? and password=?";
$result=mysqli_prepare($con, $sql);
mysqli_stmt_bind_param($result, 'ss', $myusername, $mypassword);
mysqli_execute($result);
mysqli_stmt_fetch($result);
$row_cnt = mysqli_num_rows($result);
echo $row_cnt;
?>
返回的错误是:警告:mysqli_num_rows()期望参数1为mysqli_result,给定对象
我以为我在脚本中删除了所有OO PHP实例?另外我明白这可能意味着我的查询不正确所以我在数据库中的MySQL上运行它并且似乎一切都很好:
所以我很遗憾问题是什么。我读了许多类似的帖子(也许我错过了一个与我完全相似的帖子),似乎没有人能解决这个问题。感谢您的时间和帮助。
P.S。我理解使用纯文本密码和使用&#34; password1&#34;的安全问题。我计划在构建时使用更好的安全实践,但我只想先准备好预备语句。
答案 0 :(得分:3)
你应该使用
mysqli_stmt_execute
mysqli_stmt_num_rows
而不是mysqli_execute
和mysqli_num_rows
。