Php 为唯一列更新查询

Php 为唯一列更新查询,php,mysqli,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

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

<?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();

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

  • 旁注:您可能稍微修改了脚本,然后运行它
在脚本顶部包含以下调试代码后,您可能会遇到错误,并且在上线前的开发过程中进行调试时,至关重要:

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

// rest of your code
您还可以使用
updateignoretable…
语法(但不能与当前的表创建代码一起使用):

在表中插入IGNORE


现在,您的整个代码(作为重写)如下所示:

$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();
        }
    }
}

是否无法更新唯一列

是,使用
更新忽略表…

但是,对于您当前的代码,它将在插入时失败,因为它是在更新之前执行的

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

你做过任何测试吗?@Dan这很奇怪,当我在它行不通之前尝试它时。。。我重新输入了代码,所以我的真实代码中可能出现了一些文本错误,谢谢:)看起来很好,我为什么会感到困惑,可能是语法错误?对我来说很好。检查错误-我认为您可能在对脚本进行其他更改并出现无声错误之前运行了脚本。@IdanHazan我花了很长时间为您整理答案(在发表此评论之前一个多小时)。你留下问题了还是不明白我的答案?“错误报告”和“显示错误”与问题无关错误报告与这个问题有关@IlyasMimouni,因为它会向OP揭示他们的问题。如果他们不想将其添加到脚本中,他们肯定会通过查看错误日志来了解发生了什么。包含错误检查总是一个好主意。
$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();
        }
    }
}