我正在学习php。我正在写一个PHP脚本。此脚本应从我的数据库中的表“branch”获取列“street”的值。此列中的值采用“Krakowska 50A”格式。然后我使用preg match将此值拆分为街道名称“Karkowska”和门牌号“50A”。 pregmatch的结果,我想在“街道”和“house_number”列中插入表“位置”可以有人向我解释我的代码有什么问题以及为什么这不起作用?谢谢:))
编辑: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`);
答案 0 :(得分: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;