PHP将正则表达式结果插入数据库

时间:2018-01-17 10:03:39

标签: php mysql

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

1 个答案:

答案 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;