2012-04-27 3 views
6

Я получаю сообщение об ошибке «необъявленная переменная: Темп», когда я запускаю это ...сделать временную таблицу и выберите из него

<?php 

$maketemp = "CREATE TEMPORARY TABLE temp(`itineraryId` int NOT NULL, `live` varchar(1), `shipCode` varchar(10), `description` text, `duration` varchar(10), PRIMARY KEY(itineraryId))"; 

mysql_query($maketemp, $connection) or die ("Sql error : " . mysql_error ()); 

$inserttemp = "SELECT live, id AS itineraryId, ship AS shipCode, description AS description, duration AS length FROM cruises WHERE live ='Y' INTO temp"; 

mysql_query($inserttemp, $connection) or die ("Sql error : " . mysql_error ()); 

$select = "SELECT intineraryId, shipCode, description, duration FROM temp"; 

$export = mysql_query ($select, $connection) or die ("Sql error : " . mysql_error()); 

Есть идеи?

+0

Означает ли это также, по какой строке? – Ahatius

+1

Думаю, вам может понадобиться сделать выбор в том же запросе, что и в создании. – freshnode

+0

Откуда взялась 'AS length? Вы не создали столбец 'length' в таблице temp ... (не то, что это может исправить ошибку). – DaveRandom

ответ

10

Please, don't use mysql_* functions in new code. Они больше не поддерживаются and are officially deprecated. См. red box? Узнайте о prepared statements вместо этого, и используйте PDO или MySQLi - this article поможет вам решить, какой. Если вы выберете PDO, here is a good tutorial.


Этот код должен работать:

<?php 

    $maketemp = " 
    CREATE TEMPORARY TABLE temp_table_1 (
     `itineraryId` int NOT NULL, 
     `live` varchar(1), 
     `shipCode` varchar(10), 
     `description` text, 
     `duration` varchar(10), 
     PRIMARY KEY(itineraryId) 
    ) 
    "; 

    mysql_query($maketemp, $connection) or die ("Sql error : ".mysql_error()); 

    $inserttemp = " 
    INSERT INTO temp_table_1 
     (`itineraryId`, `live`, `shipCode`, `description`, `duration`) 
    SELECT `id`, `live`, `ship`, `description`, `duration` 
    FROM `cruises` 
    WHERE `live` = 'Y' 
    "; 

    mysql_query($inserttemp, $connection) or die ("Sql error : ".mysql_error()); 

    $select = " 
    SELECT `itineraryId`, `shipCode`, `description`, `duration` 
    FROM temp_table_1 
    "; 
    $export = mysql_query($select, $connection) or die ("Sql error : ".mysql_error()); 

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

<?php 

    $query = " 
    SELECT `id` AS 'itineraryId', `ship`, `description`, `duration` 
    FROM `cruises` 
    WHERE `live` = 'Y' 
    "; 
    $export = mysql_query($query, $connection) or die ("Sql error : ".mysql_error()); 
+0

ok Я пробовал это, и он производит то же самое Sql error: Неизвестный столбец 'intineraryId' в 'списке полей' – Rich

+0

Я только что внес очень небольшое изменение в код выше, повторите попытку (в вашем последнем 'SELECT' есть ошибка орфографии - внимательно посмотрите на дополнительный' n') – DaveRandom

+1

получил ya ... extra n! Совершенный @DaveRandom, ты мужчина! Кудос :) – Rich

0

Второй запрос неверен.

Из ссылки -

Сервер MySQL не поддерживает SELECT ... INTO TABLE Sybase SQL расширения. Вместо этого MySQL Server поддерживает INSERT INTO ... SELECT. Стандартный синтаксис SQL, который в основном то же самое.

Попробуйте это вместо этого -

INSERT INTO temp 
SELECT live 
    , id AS itineraryId 
    , ship AS shipCode 
    , description AS description 
    , duration AS length 
FROM 
    cruises 
WHERE 
    live = 'Y' 
0

Мне нравится использовать Heredoc, чтобы помочь мне построить встроенный запрос SQL (просто, чтобы сделать какие-либо тонкие ошибки вопиющими); так что ваш первый запрос будет выглядеть следующим образом:

$maketemp =<<<s 
CREATE TEMPORARY TABLE temp(
`itineraryId` int NOT NULL, 
`live` varchar(1), 
`shipCode` varchar(10), 
`description` text, 
`duration` varchar(10), 
PRIMARY KEY(itineraryId)); 
s; 

Затем, если вы хотите исправить 2-й запроса без перечисления полой таблицы, которую вы хотите вставить записи, вы должны перечислить поля в том же.

Просто запрос на этот раз:

INSERT INTO temp 
SELECT id, live, ship, description, duration 
FROM cruises 
WHERE live = 'y'; 

И последняя вещь, о временном переменном это: Проверьте часть о его видимости. Вы можете использовать ключевое слово TEMPORARY при создании таблицы. Таблица TEMPORARY видна только для текущего соединения и автоматически отбрасывается при закрытии соединения. http://dev.mysql.com/doc/refman/5.5/en/create-table.html

Что это означает: когда вы подключены к MySQL напрямую, например, через интерфейс командной строки, как это:

mysql> #our query here line-by-line 

Тогда вы по существу в том же соединении через все ваши несколько запросов, пока сеанс активен.

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

Попробуйте выполнить все запросы, отправив их в рамках выполнения одной команды/запроса.

Удачи.