PHP mysqli_fetch_array()不会将所有选择查询插入到while循环中的表中

时间:2014-04-07 17:31:28

标签: php mysql sql mysqli syntax-error

我有一段PHP代码如下:

$DB_FIRST_NAME = 'NYC';
$DB_SECOND_NAME = 'SFBAY';
$DB_HOST = 'localhost';
$DB_USER = '***';
$DB_PASS = '***';

$db_connect_first = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_FIRST_NAME);   
$select_query_first = "SELECT field1, field2, field3 FROM names WHERE date > '2014-04-04 00:00:00'";
$query_result_first = $db_connect_first->query($select_query_first);

$db_connect_second = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_SECOND_NAME, true);   
while($row = $query_result_first->fetch_assoc()){
    $field1 = $row['field1'];
    $field2 = $row['field2'];
    $field3 = $row['field3'];
    $insert_query_second = "INSERT INTO hello (firstname, lastname, dob) VALUES ('$field1', '$field2', '$field3')";
    $insert_en_result = $db_connect_second->query($insert_query_second);
}

SELECT查询返回20行;但是,INSERT查询仅在hello表中插入十二行。对于未插入表mysqli_error() expects parameter 1 to be mysqli, boolean given in...的查询,我收到此错误。请你看看,让我知道这个问题吗?

注意:Select查询没有错误,代码完全回应$field1循环中的$field2$field3while。但是,Insert查询不适用于所有行。 此外,表结构类似,但它们具有不同的字段名称。

  CREATE TABLE IF NOT EXISTS names (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `field1` text NOT NULL,
  `field2` text NOT NULL,
  `field3` text NOT NULL,
  PRIMARY KEY (`id`),
  ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=21 ;

  CREATE TABLE IF NOT EXISTS hello ( 
     id int(11) NOT NULL AUTO_INCREMENT, 
     firstname text CHARACTER SET utf8 COLLATE utf8_unicode_ci,
     lastname text CHARACTER SET utf8 COLLATE utf8_unicode_ci, 
     dob mediumtext CHARACTER SET utf8 COLLATE utf8_unicode_ci, 
     PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=400 ; 

下面是数据库中Describe hello查询的图片。 enter image description here

以下是SHOW INDEX FROM hello的结果 enter image description here

2 个答案:

答案 0 :(得分:3)

您应该只使用一个查询执行此操作:

INSERT INTO SFBAY.hello
    (firstname, lastname, dob)
SELECT field1, field2, field3
FROM NYC.names
WHERE date > '2014-04-04 00:00:00'

无需首先从一个数据库和表中查询结果集,然后单独循环遍历结果集,使插入到另一个数据库和表中。

只要您使用的用户在两个数据库上都拥有属性权限(在您的示例中就是这种情况),您就可以在一个查询中跨多个数据库工作。

答案 1 :(得分:1)

感谢所有人的意见和答案。问题比我想象的要简单得多!这是因为field1field3列中有一些HTML数据,因此我只是将field1field2field3传递到while循环中mysqli_real_escape_string()功能如下:

$field1 = mysqli_real_escape_string($db_connect_second, $row['field1']);
$field2 = mysqli_real_escape_string($db_connect_second, $row['field2']);
$field3 = mysqli_real_escape_string($db_connect_second, $row['field3']);