bind_param() усекает ввод при первом нечисловом символе

#php #mysqli

#php #mysqli

Вопрос:

Этот фрагмент моего PHP-кода не выводит месяцы, дни, часы .. и т.д. Это код:

 $dat = date('Y-m-d H:i:s');
$stmt = $LINK ->prepare("INSERT INTO NewUser VALUES (NULL, ?, ?, ?, ?)");
$stmt->bind_param('isss',$dat, $Phone, $User, $Pass);

/* execute prepared statement */
$stmt->execute();
 

И вывод в моей базе данных — это только год.
введите описание изображения здесь

итак, чего мне не хватает после выполнения всего, что здесь написано?

Комментарии:

1. Вы передаете дату как целое число. Это означает, что он будет интерпретировать только часть строки до первого нечислового символа.

2. Вы привязываете дату как целое число, из-за чего PHP принимает только часть года.

3. @Johannes Нет. На самом деле, это varchar . Если я устанавливаю его как дату в phpmyadmin, он выдает мне только нули.

Ответ №1:

Вы всегда должны связывать параметры в виде строк. Первый аргумент в bind_param() — это список типов. Все они должны быть s .

 $stmt->bind_param('ssss',$dat, $Phone, $User, $Pass);
 

Когда вы связываете как целое число, PHP преобразует строку в целое число. 2021-01-29 11:11:11 будет преобразован в 2021 , поскольку - не является числом. Остальная часть строки будет отброшена.

Единственный раз, когда вы должны использовать что-то в виде целого числа или строки, — это когда MySQL не может определить правильный тип. Это 0,001% всех случаев.

Если вас смущает mysqli API, пожалуйста, изучите PDO вместо этого. Это проще для начинающих и предлагает больше функциональности.

Кроме того, убедитесь, что ваш тип столбца в базе DateTime данных не varchar или int ! Если вам нужна текущая дата, тогда используйте NOW() SQL, а не PHP date() .