我在学php。我正在写一个php脚本。这个脚本应该从我的数据库中的表“branch”中获取列“street”的值。此列中的值采用“krakowska 50a”格式。然后我使用preg match将这个值拆分为街道名“karkowska”和房屋号“50a”。在pregmatch的结果中,我想在表中插入“location”中的“street”和“house\u number”列,有人能解释一下我的代码有什么问题,为什么不起作用吗?谢谢:)
编辑:preg匹配工作,问题是查询不工作。
edit2:好吧,我想问题是$streetname或$streetnumber是空的,我必须插入null。是这样吗?如何更改查询以执行此操作?
edit3:更新代码,现在可以了,但是只插入preg match results的第一个值。我不知道如何为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`);
1条答案
按热度按时间bfrts1fy1#
没有主键,表定义错误。
应该是:
就你而言: