【发布时间】:2016-02-04 01:03:06
【问题描述】:
我在一个网站上工作,我刚刚将它的数据库从运行 CentOS 6 的服务器移动到运行 CentOS 7 的服务器,现在我的查询不起作用,除非查询中的所有列都存在。
$sql = 'INSERT INTO users(name, user, huser, hpass, mail, salt) VALUES (?, ?, ?, ?, ?, ?)';
/* Prepare statement */
$stmt = $conn->prepare($sql);
if($stmt === false) {
trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $conn->errno . ' ' . $conn->error, E_USER_ERROR);
}
/* Bind parameters. Types: s = string, i = integer, d = double, b = blob */
$stmt->bind_param('ssssss', $name, $user, $huser, $hpass, $email, $salt);
/* Execute statement */
$stmt->execute();
mysqli_close($conn);
echo "Register succeeded! Please wait...";
此脚本运行良好,唯一的更改是 mysql 服务器地址和凭据。如果我添加一些虚拟变量并完成查询中的所有列,它就可以正常工作。
这是我需要更改的设置吗?我想尽量减少查询,稍后将使用空列。这是不好的做法吗?更换服务器打破了这一事实让我认为这要么是 mysqli 版本的不同,要么是 mysqld 的配置。
【问题讨论】:
-
你真的不应该在密码哈希上使用你自己的盐,你真的应该使用 PHP 的 built-in functions 来处理密码安全。如果您使用的 PHP 版本低于 5.5,则可以使用
password_hash()compatibility pack。 -
你没有执行你的查询。
-
如果与此查询相关的所有代码@JayBlanchard 都是正确的。
-
@JayBlanchard 这只是一个错误,忘记复制执行。正如我在OP中所说,如果我将数据库切换到旧数据库,代码可以正常工作,所以它一定是配置或版本问题。