php将regex结果插入数据库

xzlaal3s  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(302)

我在学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`);
bfrts1fy

bfrts1fy1#

没有主键,表定义错误。
应该是:

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;

相关问题