php - 无法在ubuntu上执行mysql插入

标签 php mysql ubuntu

我最近使用 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/

相关文章:

linux - 用shell脚本中的空行替换文件的一行?

php - 使用 PHP Switch/Case Breaks CSS 的下拉菜单

php - 如何删除包含多个帖子的页面中的帖子? [MySql]

mysql - INSERT...ON DUPLICATE KEY UPDATE 与客户端流量控制 : pros and cons

Django : Run Django at system boot

c++ - "multiple definitions"报错

php - 设置为在 session 结束时过期的 Cookie 不能提前过期 'deleted'

php - 如何使用 CodeIgniter 的 URL 参数将项目插入数据库?

php - fatal error : session_start() after upgrading to Codeigniter 3

php - 我可以在 PDO 中使用列名作为参数吗?