更新唯一列的查询

时间:2016-06-12 12:24:36

标签: php mysqli

此查询仅更改名称,我也想更改用户名...

<?php

define('HOST', 'localhost');
define('USERNAME', 'root');
define('PASSWORD', '');
define('DATABASE', 'mydb');

$mysqli = new mysqli(HOST, USERNAME, PASSWORD, DATABASE);
$query = "CREATE TABLE users (id INT UNSIGNED NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOT NULL, name VARCHAR(50) NULL, PRIMARY KEY (id), UNIQUE(username)) ENGINE = MyISAM";

if ($mysqli->query($query)) {
    $query = "INSERT INTO users (id, username, name) VALUES (1, 'user1', 'name1')";

    if ($mysqli->query($query)) {
        $query = "UPDATE users SET username = 'user_1', name = 'name_1' WHERE id = 1";

        if ($mysqli->query($query)) {
            $query = "SELECT id, username, name FROM users WHERE id = 1";
            $result = $mysqli->query($query);

            while ($row = $result->fetch_assoc()) {
                echo 'id = ' . $row['id'] . ', username = ' . $row['username'] . ', name = ' . $row['name'];
            }

            $result->free();
        }
    }
}

$mysqli->close();

?>

在这个例子中:

  • 以[1,user1,name1]
  • 开头
  • 已更改为[1,user1,name_1]
  • 而不是[1,user_1,name_1]

无法更新UNIQUE列?

1 个答案:

答案 0 :(得分:1)

您的脚本在重新加载时(仅在第一次/初始执行时)不会运行(表创建),因为您的表已经存在且MySQL默默地失败,因为您没有检查错误。

  • 旁注:您可能稍微修改过您的脚本,然后再运行它。

在您的脚本顶部包含以下调试代码后,您可能会遇到错误,在开发期间调试时至关重要:

<?php 
error_reporting(E_ALL);  
ini_set('display_errors', 1); 
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

// rest of your code

因此,您只能运行该脚本一次。您需要使用新的表名再次测试它,或者删除表创建代码。

您还可以检查表格是否存在。

参考文献:

一个简单的例子:

CREATE TABLE IF NOT EXISTS `test`

您也可以使用UPDATE IGNORE table ...语法(不要与现有的表创建代码一起使用):

INSERT IGNORE INTO table

现在你的整个代码(作为重写)看起来像这样:

$query = "CREATE TABLE IF NOT EXISTS users 
        (id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
         username VARCHAR(50) NOT NULL, 
         name VARCHAR(50) NULL, 
         PRIMARY KEY (id), 
         UNIQUE(username)) 
         ENGINE = MyISAM";

if ($mysqli->query($query)) {
    $query = "INSERT IGNORE INTO users (id, username, name) VALUES (1, 'user1', 'name1')";

    if ($mysqli->query($query))  {
        $query = "UPDATE IGNORE users SET username = 'user_1', name = 'name_1' WHERE id = 1";

        if ($mysqli->query($query))  {
            $query = "SELECT id, username, name FROM users WHERE id = 1";
            $result = $mysqli->query($query);

            while ($row = $result->fetch_assoc()) {
                echo 'id = ' . $row['id'] . ', username = ' . $row['username'] . ', name = ' . $row['name'];
            }

            $result->free();
        }
    }
}
  

无法更新UNIQUE列?

是的,UPDATE IGNORE table ...

然而,对于您目前的代码,它会在INSERT上失败,因为在<更新 UPDATE之前执行

  • 从逻辑上思考 ,你会看到这里发生了什么。