2015-07-09 2 views
1

Я пытался вставить данные из одной таблицы в другую, и это сообщение об ошибке я получаю:PHP Вставка данных из одной таблицы в другую

Error: INSERT INTO content2 (d1, d2, d3) VALUES (John, Doo, 24);

Unknown column 'John' in 'field list'Error: INSERT INTO content2 (d1, d2, d3) VALUES (Mary, Moe, 36);

Unknown column 'Mary' in 'field list'Error: INSERT INTO content2 (d1, d2, d3) VALUES (Julie, Dooley, 42)

Unknown column 'Julie' in 'field list'Error: INSERT INTO content2 (d1, d2, d3) VALUES (John, Doo, 24);

Unknown column 'John' in 'field list'Error: INSERT INTO content2 (d1, d2, d3) VALUES (Mary, Moe, 36);

Unknown column 'Mary' in 'field list'Error: INSERT INTO content2 (d1, d2, d3) VALUES (Julie, Dooley, 42);

Unknown column 'Julie' in 'field list'

Вот мой PHP код:

//Get Connection 
require_once('connect.php'); 

//Get Data 
$sql = "SELECT d1, d2, d3 FROM content"; 
$result = mysqli_query($con, $sql); 

if (mysqli_num_rows($result) > 0) { 
// output data of each row 
    while($row = mysqli_fetch_assoc($result)) { 
     $row1 = $row["d1"]; 
     $row2 = $row["d2"]; 
     $row3 = $row["d3"]; 

//Insert Data to another table 
      $sql = "INSERT INTO content2 (d1, d2, d3) 
      VALUES ($row1, $row2, $row3);"; 
      if (mysqli_multi_query($con, $sql)) { 
       echo "New records created successfully"; 
      } else { 
       echo "Error: " . $sql . "<br>" . mysqli_error($con); 
      } 
     //echo "id: " . $row["d1"]. " - Name: " . $row["d2"]. " " . $row["d3"]. "<br>"; 
    } 
} else { 
    echo "0 results"; 
} 

Я не мог понять, в чем проблема. Пожалуйста, помогите

+0

'VALUES ($ row1, $ row2, $ row3) 'to' VALUES ('$ row1', '$ row2', '$ row3') ' –

+2

** ПРЕДУПРЕЖДЕНИЕ **: при использовании' mysqli' вы должны использовать параметризованные запросы и ['bind_param'] (http : //php.net/manual/en/mysqli-stmt.bind-param.php), чтобы добавить данные пользователя в ваш запрос. ** НЕ используйте ** интерполирование строк или конкатенацию, чтобы выполнить это, потому что вы создадите серьезные [SQL-инъекции ошибок] (http://bobby-tables.com/). ** НИКОГДА ** не вводить необработанные пользовательские данные непосредственно в запрос. – tadman

+0

Лучшим вариантом было бы использовать подготовленные операторы, чтобы содержать ошибочную или необоснованную предоставленную информацию от взлома вашей базы данных или допускать атаки на SQL-инъекции. – Orangepill

ответ

4

Когда PHP отправляет вставки запроса к MySQL, он заканчивает тем, как это:

INSERT INTO content2 (d1, d2, d3) VALUES (John, Mary, Julie); 

Поскольку нет никаких кавычек вокруг «Джон», «Мэри» и «Джули», MySQL думает, что вы имеете в виду другие имена столбцов. Быстрое и грязное решение заключалось бы в добавлении кавычек в ваш запрос, но, как говорит @tadman, вы никогда не должны использовать этот стиль запроса и вместо этого должны использовать bind_param, чтобы добавить свои переменные в запрос.

Однако, если все, что вы хотите сделать, это скопировать из одной таблицы в другую, как говорит @Dan Bracuk, вы можете сделать это с помощью одного запроса:

INSERT INTO content2 (d1, d2, d3) 
SELECT d1, d2, d3 
FROM content 
2

Это можно сделать с помощью прямого sql.

insert into content2 
(d1, d2, d3) 
select d1, d2, d3 
from content 
Смежные вопросы