所以我有一个有趣的问题。我创建了一个表,其列明确定义为文本数据类型(名称列)。当我向其中插入字符串时,它返回 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/