我在一个网站上工作,我只是将其数据库从运行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的配置。
答案 0 :(得分:1)
此脚本运行正常
我发现很难相信。您已指定10个属性中没有一个可以为null,只有2个具有默认值(id,access),并且您的脚本仅在INSERT上设置6个值。
如果您指定的值必须为NULL,那么您必须指定默认值或设置值。
如果脚本在旧服务器上运行,则它必须具有与上述不同的架构。