我正在开发一个网站,我刚刚将其数据库从运行 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 的配置的差异。
最佳答案
This script was running fine
我觉得这很难相信。您已指定 10 个属性都不能为 null,只有 2 个属性具有默认值(id、access),并且您的脚本仅在 INSERT 上设置其中的 6 个值。
如果您已指定值不得为 NULL,则必须指定默认值或设置一个值。
如果脚本在旧服务器上运行,它必须具有与上述不同的架构。
关于php - 除非所有列都存在,否则 Mysqli INSERT 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35171368/