在这个问题上出去了。这是我迄今为止的情况和尝试:
我有一个收集电子邮件和密码的简单表单,然后将其插入到具有三列的数据库表中。该表名为users
,三列名为userID
,userEmail
,userPassword
。这是我的开始代码:
// hash the password value
$pass = hash_hmac('sha256', $p, 'c#hArl891', true);
// Query the database:
$q = "INSERT INTO users (userEmail, userPassword) VALUES ('".$e."','".$pass."')";
$r = mysqli_query ($dbc, $q);
if (mysqli_num_rows($r) == 1) { // Successful insertion.
此代码发生的事情是电子邮件(变量$e
)在数据库中正确显示,密码是乱码(副作用),但mysqli_num_rows($r)
返回了此错误:< / p>
mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given
我尝试用$ p替换散列值,我尝试用常量替换两个变量,我尝试在表名和字段名称周围使用反向标记,我尝试了一个建议我在网上找到使用大括号:
$q = "INSERT INTO users (`userEmail`,`userPassword`) VALUES ('{$e}','{$pass}')";
似乎无法获得mysqli_num_rows($r) == 1
。
根据返回的错误消息,我看到变量值为:
[e] => webmaster@brukenet.com
[p] => 12345
[pass] => Ç o’,YÊ2ý€|y:fز"?ïÑ`{a]YÑ=Âk¼
[q] => INSERT INTO `users` (`userEmail`, `userPassword`) VALUES ('webmaster@brukenet.com', 'Ç o’,YÊ2ý€|y:fز"?ïÑ`{a]YÑ=Âk¼')
[r] => 1
和
[dbc] => mysqli Object
这些似乎表明$r
等于1
,但这是直接从同一错误消息中获取的。
我一整夜都在睡觉,我觉得这一定是显而易见的,我只是看得太过但我却看不到它。
答案 0 :(得分:0)
插入查询不会返回结果集,您只能在结果集上使用mysqli_num_rows()
。
尝试
if (mysqli_affected_rows($dbc) > 0) {
至于您的哈希问题,您确定要存储原始二进制输出吗?将true
函数中的false
更改为hash_hmac()
,或对原始二进制数据使用bin2hex()
以获取可读数据。