我最近使用 ssh 将我的网站从我的电脑上传到 ubuntu。
在我上传之前,它在 xampp 上运行良好。
现在其他一切正常,但 mysql 插入查询。
连接正常,mysql 更新。 mysql error.log
中没有任何内容。
Select 也在工作。
这是行不通的
$user_query = $db->prepare("INSERT INTO users (id, userid, name) VALUES (:id, :userid, :name)");
if($url_query->execute(array(":id" => "", ":userid" => $userid, ":name" => $name))){
header("location: /");
}
这是有效的
$user_query = $db->prepare("UPDATE users SET name=:name WHERE userid =:userid");
if($user_query->execute(array(":name" => $name, ":userid" => $userid))){
header("location: /");
}
我看不出这两个查询有什么区别。
表格
+----------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| userid | text | NO | | NULL | |
| name | text | NO | | NULL | |
+----------+---------+------+-----+---------+----------------+
我的主机来自 digitalocean,我使用了 this当我安装我的 apache 和 mysql 时
$user_query = $db->prepare("SELECT id FROM users WHERE userid=:userid");
if($user_query->execute(array(":userid" => $userid))){
if($user_query->rowCount()){
$user_query = $db->prepare("UPDATE users SET name=:name WHERE userid =:userid");
if($user_query->execute(array(":name" => $name, ":userid" => $userid))){
header("location: /");
}
} else {
$user_query= $db->prepare("INSERT INTO users (id, userid, name) VALUES (:id, :userid, :name)");
if($user_query->execute(array(":id" => "", ":userid" => $userid, ":name" => $name))){
header("location: /");
}
}
}
最佳答案
由于 id
字段设置为 auto_increment
,因此请将其从插入语句中删除。 MySQL 将为您处理。在您当前的查询中,您实际上是在尝试将 id 字段设置为空字符串(这应该会导致错误,因为它是一个不可为 null 的唯一主键,设置为自动递增的整数)。
尝试:
$user_query= $db->prepare("INSERT INTO users (userid, name) VALUES (:userid, :name)");
if($user_query->execute(array(":userid" => $userid, ":name" => $name))){
header("location: /");
}
如果您让它在一台服务器上运行而不在另一台服务器上运行,则可能取决于 MySQL 版本。较新的 MySQL 版本对值的完整性更加挑剔。
关于php - 无法在ubuntu上执行mysql插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41772385/