PHP Вставить результаты регулярных выражений в базу данных

0

Я изучаю php. Я пишу php-скрипт. Этот скрипт должен получить значение столбца "улица" из таблицы "branch", которая находится в моей базе данных. Значения в этой колонке представлены в формате "Краковская 50А". Затем я использую preg match, чтобы разделить это значение на уличное название "Karkowska" и номер дома "50A". Результаты pregmatch, я хочу вставить в таблицу "location" в столбцах "street" и "house_number". Может кто-нибудь объяснить мне, что не так с моим кодом и почему это не работает? Спасибо :)

EDIT: Preg match работает, проблема заключается в том, что запрос не работает.

EDIT2: Хорошо, я думаю, проблема в том, что $ streetName или $ streetNumber пуст, и мне нужно вставить NULL. Это правильно? Как изменить запрос, чтобы сделать это?

EDIT3: обновить код, теперь он работает, но только вставляет первое значение результатов соответствия результатов. Я не знаю, как вставлять значения в расположение таблицы для id = 1, id = 2, id = 3,... из ветки таблицы.

<?php

$db = mysqli_connect('localhost','root','','jakoscobslugi')
or die('Error connecting to MySQL server.');

$query0 = "TRUNCATE location";
mysqli_query($db,$query0) or die('Error query0.');

$result = mysqli_query($db, "SELECT street FROM branch;");

while($row = mysqli_fetch_assoc($result))
{
    preg_match('/\s?([^\d]+\s?)\s?(\d+.*)*/', $row['street'], $street);

    //$streetName = $street[1];

    //$streetNumber = $street[2];     

    echo "[". $street[1] ."] [". $street[2] ."]";
    echo "<br />";  

    $query2 = "INSERT INTO location(id, street, house_number, phone_number)
    SELECT id, '$street[1]', '$street[2]', phone
    FROM branch
    ON DUPLICATE KEY UPDATE id=branch.id, phone_number=branch.phone";
    mysqli_query($db, $query2) or die('Error query2: ' . mysqli_error($db));
}
?>

Это мое место в таблице, которое я не писал, и я не могу его изменить:

CREATE TABLE 'location' (
  'id' int(11) NOT NULL,
  'company_data_id' int(11) DEFAULT NULL,
  'street' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  'house_number' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  'apartment_number' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  'postal_code' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  'city' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  'phone_number' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  'type' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  'created_at' datetime DEFAULT NULL,
  'updated_at' datetime DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

ALTER TABLE 'location'
  ADD PRIMARY KEY ('id'),
  ADD KEY 'IDX_5E9E89CB17A7BBEB' ('company_data_id');
  • 3
    Почему вы думаете, что ваш код неверен? Опишите пожалуйста что не работает
  • 1
    Я предполагаю, что столбец улицы в вашей базе данных является столбцом строкового типа, вы можете либо использовать параметры, либо использовать VALUES ( 'streetName', blablabla
Показать ещё 6 комментариев
Теги:

1 ответ

0

Первичного ключа нет, определение таблицы неверно.

Должно быть:

  CREATE TABLE 'location' (
  'id' int(11) AUTO_INCREMENT PRIMARY KEY,
  'company_data_id' int(11) DEFAULT NULL,
  'street' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  'house_number' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  'apartment_number' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  'postal_code' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  'city' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  'phone_number' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  'type' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  'created_at' datetime DEFAULT NULL,
  'updated_at' datetime DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

В твоем случае:

ALTER TABLE location CHANGE id id int(11) AUTO_INCREMENT PRIMARY KEY;
  • 0
    Да, конечно, извините. У меня также есть ALTER TABLE, где идентификатор установлен на первичный ключ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню