2016-04-05 2 views
-1

У меня есть 4 страницы, через которые мне нужно поделиться одним и тем же рестораном_ID. Мне нужно иметь возможность вставлять ID во все 4 таблицы в базе данных. Я использую оператор INSERT INTO SELECT для этого. Но я получаю следующее сообщение об ошибке:SQL INSERT INTO SELECT Проблема синтаксиса выписки

POSSIBLE Syntax Error (check preceding valid syntax error) unexpected: identifier 'SELECT'

POSSIBLE Syntax Error (check preceding valid syntax error) unexpected: identifier 'Resturant_ID'

POSSIBLE Syntax Error (check preceding valid syntax error) unexpected: identifier 'Rest_Dets'

Это SQL Я использую:

(Original):

INSERT INTO Product (Resturant_ID) 
    SELECT Resturant_ID Rest_Dets; 

(Edited):

INSERT INTO Product (Resturant_ID) 
    SELECT Resturant_ID FROM Rest_Dets; 

I также попробовали

$rest_id = mysqli_real_escape_string($dbc, $_SESSION['Resturant_ID']); 
    INSERT INTO Product (Resturant_ID) 
    SELECT Resturant_ID FROM Rest_Dets WHERE Resturant_ID = $rest_id ; 

Я посмотрел по всему Интернету, и похоже, что у меня не было проблем, веб-страница также успешно подключена.

Rest_Details (таблица я хочу, чтобы получить Restaurant_ID от)

 CREATE TABLE `Rest_Details` (
    `Resturant_ID` bigint(255) NOT NULL AUTO_INCREMENT, 
    `Resturant_name` varchar(100) NOT NULL, 
    `Resturant_des` varchar(200) NOT NULL, 
    `Res_Address_Line_1` varchar(200) NOT NULL, 
    `Res_Address_Line_2` varchar(200) DEFAULT NULL, 
    `City_name` varchar(100) NOT NULL, 
    `Resturant_Postcode` varchar(8) DEFAULT NULL, 
    `Cat_ID` tinyint(11) NOT NULL, 
    `Avg_Del` tinyint(11) NOT NULL, 
    `Est_Del` tinyint(11) NOT NULL, 
    `Email1` varchar(200) NOT NULL, 
    `Email2` varchar(200) DEFAULT NULL, 
    `Min_ord` tinyint(11) NOT NULL, 
    PRIMARY KEY (`Resturant_ID`), 
    UNIQUE KEY `Resturant_name` (`Resturant_name`), 
    UNIQUE KEY `Resturant_ID` (`Resturant_ID`) 
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 

Продукты

CREATE TABLE `Product` (
    `Product_Id` bigint(255) NOT NULL AUTO_INCREMENT, 
    `Resturant_ID` bigint(255) NOT NULL, 
    `Product_Name` varchar(100) NOT NULL, 
    `Product_Desc` text NOT NULL, 
    `Product_Price` decimal(65,0) NOT NULL, 
    `Add_On_ID` int(11) NOT NULL, 
    PRIMARY KEY (`Product_Id`), 
    UNIQUE KEY `Product_Id` (`Product_Id`), 
    UNIQUE KEY `Resturant_ID` (`Resturant_ID`) 
    ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 
+0

Вы прочитали инструкцию по эксплуатации? https://dev.mysql.com/doc/refman/5.5/en/insert-select.html –

+2

'SELECT Resturant_ID FROM Rest_Dets' –

+0

@juergend Я пытаюсь одновременно выбирать и вставлять. – jerneva

ответ

0

Как указано Фред-II- вы можете прочитать https://dev.mysql.com/doc/refman/5.5/en/insert-select.html, который даст вам именно ответ вам ищу:

INSERT INTO Product (Resturant_ID) SELECT Resturant_ID FROM Rest_Dets WHERE <condition>; 

Дополнительная информация

WHERE Resturant_ID = $rest_id ;

Ваша строка (если это строка) должен быть заключен в одинарные кавычки:

WHERE Resturant_ID = '$rest_id' ; 

И правильно сцеплены, независимо от того, если это строка или номер:

WHERE Resturant_ID = '".$rest_id."' ; 

В качестве альтернативы вы можете добиться именно того, чего вы хотите, просто сделав:

INSERT INTO Product(Resturant_ID) VALUES ('".$rest_id."') 

(Вы также ошиблись в ресторане.)


Решение

Решение от ваших комментариев, я думаю, это:

Ваш текущий код PHP что-то вроде:

<?php 
... 
$rest_id = mysqli_real_escape_string($dbc, $_SESSION['Resturant_ID']); 
    INSERT INTO Product (Resturant_ID) 
    SELECT Resturant_ID FROM Rest_Dets WHERE Resturant_ID = $rest_id ; 

Вы набираете SQL команды непосредственно в PHP-скрипт, который дает вам ошибки, которые вы указываете в своем вопросе, поэтому то, что вы должны делать, - это запуск SQL-запросов через интерфейс (в этом случае PHP выполняет настройку и выполнение команд MySQL на сервере).

Просьба ознакомиться с http://php.net/manual/en/book.mysqli.php, который даст вам хорошее руководство по использованию функций MySQLi в скрипте PHP для связи с вашей базой данных.

Ваша ссылка на mysqli_real_escape_from_newyork_string является своего рода функций я на о, вы должны быть в состоянии ясно видеть из приведенного ниже кода, что (я думаю) вы пропустили:

<?php 
/** Error reporting: **/ 
    error_reporting(E_ALL); 
    ini_set('display_errors', 1); 

/** Set up the mysqli connection: **/ 
    $dbc = mysqli_connect("localhost", "my_user", "my_password", "my_db"); 

/** Next clean your input **/ 
    $rest_id = mysqli_real_escape_string($dbc, $_SESSION['Resturant_ID']); 

/** Next run the query **/ 
    mysqli_query($dbc, "INSERT INTO Product (Resturant_ID) 
    SELECT Resturant_ID FROM Rest_Dets WHERE Resturant_ID = ".$rest_id."") 
    or die(__LINE__.": yourSQL Error: ".mysqli_error($dbc)); 

/** It is good practise for beginniners to add the or die to the end of the code to 
display MySQLi errors. NOT FOR PUBLIC/LIVE WEBSITES **/ 

/** Finally a success statment! **/ 
    print "If you can read this then your query worked ok!!"; 

Копирование и вставка приведенный выше код на вашу страницу, и подумайте о логике и отрегулируйте ее вокруг вашего текущего кода, но это, я думаю, является ключом, которого вы не видите. Пожалуйста, почитайте следующие статьи:

ПРИМЕЧАНИЯ:

  • Помните, что если ваш $rest_id является строкой, то он должен быть заключен в одинарные кавычки внутри mysqli_query()
  • localhost может быть не локальным (на том же компьютере, на котором работает PHP), и может находиться на другом сервере.
  • ВСЕГДА очистите любой вход как можно дольше. Никогда не доверяйте ни одному пользователю.
  • NEVER использовать функции MySQL_, они больше не поддерживаются. Используйте MySQLi (как здесь) или PDO.
+0

мои извинения, я должен был также заявить, что устал ... WHERE Resturant_ID = $ rest_id. И определил $ rest_id перед рукой. – jerneva

+0

У меня такое ощущение, что OP не сообщает нам всю историю, поскольку они первоначально отмечали как php, и ошибка может очень хорошо лежать там. –

+0

Я бы еще раз посмотрел на редактирование парня. Под этим * «Я тоже пробовал ...» *. Единственный php, который я вижу там, это первая строка, а затем код, который обычно выполняется в секции SQL phpmyadmin, а не PHP. –

Смежные вопросы