簡體   English   中英

PHP將正則表達式結果插入數據庫

[英]PHP Insert regex results into database

我正在學習php。 我正在寫一個php腳本。 該腳本應該從數據庫中的表“ branch”中獲取“ street”列的值。 此列中的值格式為“ Krakowska 50A”。 然后,我使用預匹配將這個值拆分為街道名稱“ Karkowska”和門牌號“ 50A”。 pregmatch的結果,我想在“ street”和“ house_number”列的表“ location”中插入表。有人可以向我解釋我的代碼有什么問題,為什么這不起作用? 謝謝 :)

編輯:Preg匹配有效,問題是查詢不起作用。

EDIT2:好的,我想問題是當$ streetName或$ streetNumber為空時,我必須插入NULL。 那正確嗎? 如何更改查詢來做到這一點?

EDIT3:更新代碼,現在可以使用,但是只能插入preg匹配結果的第一個值。 我不知道如何從表分支中為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`);

沒有主鍵,您的表定義錯誤。

應該:

  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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM