[英]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.