【问题标题】:MySQLi insert into statement inserts data but also shows errorsMySQLi insert into 语句插入数据但也显示错误
【发布时间】:2013-11-26 14:33:54
【问题描述】:

在这件事上我疯了。以下是目前的情况和我尝试过的方法:

我有一个简单的表单,它收集电子邮件和密码,然后应该将它们插入到具有三列的数据库表中。该表称为users,三列称为userIDuserEmailuserPassword。这是我的起始代码:

// 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) 返回此错误:

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,但这直接取自同一错误消息。

我彻夜未眠,我想这一定是很明显的事情,我只是在俯瞰,但我就是看不到。

【问题讨论】:

    标签: php insert mysqli


    【解决方案1】:

    插入查询不返回结果集,您只能在结果集上使用mysqli_num_rows()

    尝试做

    if (mysqli_affected_rows($dbc) > 0) {
    

    至于您的哈希问题,您确定要存储原始二进制输出吗?在 hash_hmac() 函数中将 true 更改为 false 或在原始二进制数据上使用 bin2hex() 以获得一些可读数据。

    【讨论】:

    • 解决了主要问题;错误消息消失了,我能够正确触发条件。非常感谢!
    • 也感谢您提供的哈希信息。如果可以的话,我会将问题标记为正确两次。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    相关资源
    最近更新 更多