【发布时间】:2020-09-22 01:53:15
【问题描述】:
我最近刚刚添加了一个位列,由于某种原因,我无法编辑它的值。其他一切都很好。我在网上查找错误,有些人建议禁用严格模式,所以我做到了。感谢您查看我的问题。
我尝试使用SET sql_mode = ''; 禁用严格模式,但还是不行。
显示创建表 tbl_users;
| tbl_users | CREATE TABLE `tbl_users` (
`user_id` int NOT NULL AUTO_INCREMENT,
`user_role_id` int DEFAULT NULL,
`first_name` varchar(255) NOT NULL,
`last_name` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`admin_approved` bit(1) NOT NULL DEFAULT b'0',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
edit.php
<?php
//DB Connection
include 'conn.php';
if ($_POST['action'] == 'edit') {
$data1 = [
':first_name' => $_POST['first_name'],
':last_name' => $_POST['last_name'],
':email' => $_POST['email'],
':admin_approved' => $_POST['admin_approved'],
':user_id' => $_POST['user_id'],
];
$query1 = "
UPDATE tbl_users
SET first_name = :first_name,
last_name = :last_name,
email = :email,
admin_approved = :admin_approved
WHERE tbl_users.user_id = :user_id
";
$statement = $connect->prepare($query1);
$statement->execute($data1);
//$statement->close();
//echo json_encode($_POST);
$result1 = mysqli_query($conn, $query1);
if ($result) {
echo "Successfully Edited";
} else {
echo "Error: " . $sql . "" . mysqli_error($conn);
}
}
if ($_POST['action'] == 'delete') {
$data2 = [
':user_id' => $_POST['user_id'],
];
$query2 =
"
DELETE FROM tbl_users
WHERE user_id = :user_id
";
$statement = $connect->prepare($query2);
$statement->execute($data2);
//$statement->close();
//echo json_encode($_POST);
$result1 = mysqli_query($conn, $query2);
if ($result) {
echo "Successfully Deleetd";
} else {
echo "Error: " . $sql . "" . mysqli_error($conn);
}
}
//echo json_encode($_POST);
?>
<?php
foreach ($_POST as $key=>$post_data) {
echo "You posted:" . $key . " = " . $post_data . "<br>";
}
?>
错误信息:
<br />
<b>Fatal error</b>: Uncaught PDOException: SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'admin_approved' at row 1 in /var/www/html/wordpress/multi_users/edit.php:23
Stack trace:
#0 /var/www/html/wordpress/multi_users/edit.php(23): PDOStatement->execute()
#1 {main}
thrown in <b>/var/www/html/wordpress/multi_users/edit.php</b> on line <b>23</b><br />
【问题讨论】:
-
var_dump($_POST);admin_approved包含什么? -
您的列
admin_approved不是布尔值,它是bit类型。您不能在其中存储字符串或数字。 -
将
bit(1)更改为int或tinyint -
@tadman OP 正在使用 PDO。
-
@Dharman 他们莫名其妙地使用了两者。