MySQL Текстовый тип данных, действующий как Int datatype - PullRequest
0 голосов
/ 20 января 2020

Так что у меня есть интересная проблема. Я создал таблицу, столбец которой четко определен как текстовый тип данных (столбец Имя). Когда я вставляю в нее строку, она возвращает 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 для столбец 'name' (который возвращает 965 для этого столбца и строки) ... Я пробовал это как строку ... 'name' => 'Shane', ... Каждый раз, когда я помещаю строку, она возвращает 0 в этом столбце.

1 Ответ

1 голос
/ 20 января 2020

wpdb-> insert метод принимает 3 параметра. 2-й параметр указывает, что значения должны быть вставлены, 3-й параметр позиционно определяет форматы вставляемых значений.

В вашем коде параметр формата содержит 2 значения, т. Е. Он определяет формат для первых 2 параметров. Все остальные параметры обрабатываются как «тип не указан», поэтому они передаются как строковые (самый распространенный тип, который может передавать все другие типы), если иное не указано в wpdb->$field_types.

1-й параметр равен 'user_id' => $_POST['uid'], а спецификация формата для него - '%s', что означает «строка».

2-й параметр - 'name' => 965, а спецификация формата для него - '%d', что означает «целое число». Таким образом, вставка значения строкового типа в этот параметр вызывает преобразование в целочисленный тип данных, и результат равен нулю.

В вашем случае я не вижу необходимости вообще указывать типы данных. Просто пропустите третий (необязательный) параметр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...