除非所有列都存在,否则 Mysqli INSERT 不起作用
Mysqli INSERT not working unless all columns are present
我在一个网站上工作,我只是将它的数据库从服务器 运行 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 个属性中的 none 可以为 null,只有 2 个具有默认值(id、access),并且您的脚本仅在 INSERT 上设置其中的 6 个值。
如果您已指定一个值不能为 NULL,那么您必须指定一个默认值或设置一个值。
如果脚本在旧服务器上运行,它必须具有与上述不同的架构。
我在一个网站上工作,我只是将它的数据库从服务器 运行 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 个属性中的 none 可以为 null,只有 2 个具有默认值(id、access),并且您的脚本仅在 INSERT 上设置其中的 6 个值。
如果您已指定一个值不能为 NULL,那么您必须指定一个默认值或设置一个值。
如果脚本在旧服务器上运行,它必须具有与上述不同的架构。