php - MySQL Text 数据类型的作用类似于 Int 数据类型

标签 php mysql wordpress

所以我有一个有趣的问题。我创建了一个表,其列明确定义为文本数据类型(名称列)。当我向其中插入字符串时,它返回 0。当我简单地输入一个整数时,它会存储该整数。长话短说,将该列视为整数而不是文本字段。这是创建语句(我正在使用 php 并插入到 wordpress 数据库中)。

global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
$sql = "CREATE TABLE IF NOT EXISTS $table_name (
    oid INT NOT NULL AUTO_INCREMENT,
    user_id INT NOT NULL,
    name TEXT NOT NULL,
    date DATE NOT NULL,
    total FLOAT NOT NULL,
    email TEXT NOT NULL,
    phone TEXT NOT NULL,
    PRIMARY KEY (oid)
    ) $charset_collate;";
    dbDelta( $sql );

这是插入语句

global $wpdb;
$data = array('user_id' => $_POST['uid'], 'name' => 965, 'date' => $_POST['CurrentDay'], 'total' => $_POST['Total'], 'email' => $_POST['Email'], 'phone' => $_POST['Phone']);
    $format = array('%s','%d');
    $wpdb->insert($table, $data, $format);
    $my_id = $wpdb->insert_id;

您可以忽略“名称”列的 965(该列和行返回 965)...我尝试将其作为字符串...'name' => 'Shane',...每次我输入了一个字符串,它在该列中返回 0。

最佳答案

wpdb->insert方法接受 3 个参数。第二个参数指定必须插入的值,第三个参数在位置上指定要插入的值的格式。

在您的代码中,格式参数包含 2 个值 - 即它指定前 2 个参数的格式。所有其他参数都被视为“未指定类型”,因此它们将作为字符串类型传输(可以传输所有其他类型的最常见类型),除非在 wpdb->$field_types 中另有指定.

第一个参数是'user_id' => $_POST['uid'],其格式规范是'%s',意思是“字符串”。

第二个参数是'name' => 965,其格式规范是'%d',意思是“整数”。因此,向该参数插入字符串类型值会导致转换为整数数据类型,结果为零。

就您而言,我认为根本没有必要指定数据类型。只需跳过第三个(可选)参数即可。

关于php - MySQL Text 数据类型的作用类似于 Int 数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59817235/

相关文章:

php - 根据存储的数据库值显示表内 API 的数组结果

php - yii 多列外键关系

wordpress - Dockerfile 中的参数未作为执行命令传递

php - 将 Woocommerce 订阅更新和同步到自定义日期

php - 每次提交表单时使 2 个表格相同

php - 当用户注册成功时,从文本字段中回显问题

php - 是否有一种干净的 HTML 方式将按键与下拉项相关联

php - 发送邮件后出现错误

java - 将 JSON 数据存储到 MySQL 数据库中

javascript - 排队脚本时向脚本标记添加其他属性