使用php mysqli将数据从一个表复制到另一个表失败

时间:2014-09-12 10:44:11

标签: php mysqli

我正在为网站制作一个联系表格,我不想立即回复,所以我将客户的电子邮件地址存储在一个表格中,我选择何时回复电子邮件以及回复谁。

为此,我使用的是我编写的脚本

<?php
/**
New Users:
---------------------------
CREATE TABLE `new_users` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `names` VARCHAR(50) NULL DEFAULT NULL,
    `email_address` VARCHAR(50) NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
)
ENGINE=InnoDB;

Email Outbox:
---------------------------
CREATE TABLE `outgoing_emails` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `names` VARCHAR(50) NULL DEFAULT NULL,
    `email_address` VARCHAR(50) NULL DEFAULT NULL,
    `email_message` VARCHAR(50) NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
)
*/

$con=mysqli_connect("localhost","root","123456","sms_enterprise");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$result = mysqli_query($con,"SELECT * FROM new_users");

while($row = mysqli_fetch_array($result)) {

$message = 'Hello _names , welcome to Axel Mining Company.Kindly visit our drilling section.';
$new_message = preg_replace ('/_names/', $row['names'],$message);

$query = "INSERT INTO outgoing_emails (names,email_address,email_message)SELECT  names,email_address,$new_message FROM new_users";

$con->query($query);

echo $new_message ."<br/>";

}

//$mysqli_close($con);

?>

我希望使用preg_replace()个性化我发送的每封电子邮件,以使用数据库中的值替换文本_names

当我echo $new_message变量时,替换会正确进行,但不会向表格outgoing_emails插入任何值。

$new_message给了我这个

Hello ben alyman , welcome to Axel Mining Company.Kindly visit our drilling section.
Hello kyle , welcome to Axel Mining Company.Kindly visit our drilling section.

脚本不能将数据插入outgoing_emails表的原因是什么?

4 个答案:

答案 0 :(得分:3)

$new_message需要引用。

$query = "INSERT INTO outgoing_emails (names,email_address,email_message)  
SELECT names,email_address,'".$new_message."' FROM new_users";

并增加列长度。当字符数为80+时,您正在使用50来插入要插入的邮件。

插入时也要小心,避免'\等字符,因为SQL会开始抱怨,所以你需要转义插入的数据。

error reporting添加到文件的顶部,这将有助于在生产测试期间。

error_reporting(E_ALL);
ini_set('display_errors', 1);

以及or die(mysqli_error($con))mysqli_query()

使用prepared statementsPDO with prepared statements代替。它们更容易使用,并且使用起来更安全。

答案 1 :(得分:0)

尝试:

INSERT INTO table1 ( column1 )
SELECT  col1
FROM    table2  

这适用于:

Oracle  
MS SQL Server  
MySQL  
Postgres  
SQLite v3  
TeraData  
DB2  
SyBase

正如第一次谷歌搜索中看到的那样。

答案 2 :(得分:0)

试试这个 -

$query = 'INSERT INTO outgoing_emails(names, email_address, email_message)
SELECT new_users.names, new_users.email_address, "$new_message"
FROM new_users'

答案 3 :(得分:0)

要将column1从table1复制到column1 table2,代码可以正常工作:

$sql = "INSERT INTO table2 (column1) SELECT column1 FROM table1";  
(mysqli_query($conn, $sql)