此查询仅更改名称,我也想更改用户名...
<?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();
?>
在这个例子中:
无法更新UNIQUE列?
答案 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之前执行。