除非所有列都存在,否则Mysqli INSERT不起作用

时间:2016-02-03 07:55:32

标签: php mysql mysqli centos

我在一个网站上工作,我只是将其数据库从运行CentOS 6的服务器移动到运行CentOS 7的服务器,现在我的查询不起作用,除非查询中存在所有列。

enter image description here

$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的配置。

1 个答案:

答案 0 :(得分:1)

  

此脚本运行正常

我发现很难相信。您已指定10个属性中没有一个可以为null,只有2个具有默认值(id,access),并且您的脚本仅在INSERT上设置6个值。

如果您指定的值必须为NULL,那么您必须指定默认值或设置值。

如果脚本在旧服务器上运行,则它必须具有与上述不同的架构。