webinar
@webinar
Учим yii2: https://youtu.be/-WRMlGHLgRg

Как победить NULL при составлении запроса в БД?

$valueString = join ( "','", $itemValues );
заменяет null на ""
код далее
$valueString = join ( "','", $itemValues );

      $valueString = "('" . $valueString . "'),";

      $values = "\n" . $valueString;

      if ($values != "") {
        $data_string = "INSERT INTO `$tableName` (`$items`) VALUES" . rtrim ( $values, "," ) . ";;;" . PHP_EOL;
        if ($this->fp)
          fwrite ( $this->fp, $data_string );
      }


соответственно имею
INSERT INTO `auth_item` (`name`,`type`,`description`,`rule_name`,`data`,`created_at`,`updated_at`) VALUES
('activity_stream_delete_comments','2','Delete comments','','','1477591890','1477591890');;;
И в базе "" вместо null
Толи лыжи не едут, толи спать пора, нужен хелп.
  • Вопрос задан
  • 143 просмотра
Решения вопроса 2
Melkij
@Melkij
PostgreSQL DBA
Соответственно придумайте, как корректно представить NULL в values именно NULL'ом. От такого использования функции join очевидно придётся отказаться.

А лучше не извращайтесь, и используйте pdo prepared statements, который null передавать умеет штатно.
Ответ написан
webinar
@webinar Автор вопроса
Учим yii2: https://youtu.be/-WRMlGHLgRg
страшно, но работает
$itemValues = array_values ( $data );
      $valueString = '';
      foreach($itemValues as $val) {
        if($val === null){
          $valueString .= "NULL,";
        } else{
          $valueString .= "'$val',";
        }
      }
      $valueString = rtrim($valueString, ',');
      $valueString = '(' . $valueString . ')';
      $values = "\n" . $valueString;

      if ($values != "") {
        $data_string = "INSERT INTO `$tableName` (`$items`) VALUES" . $values . ";;;" . PHP_EOL;
        if ($this->fp)
          fwrite ( $this->fp, $data_string );
      }
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@pudovMaxim
web-developer
'' !== NULL
Ответ написан
@synapse_people
$valueString = '';

foreach($itemValues as $val) {
$valueString = is_null($val) ? 'null,' : sprintf('"%s",', $val);
}
$valueString = rtrim($valueString, ',');
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы