Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 制作一个临时表并从中进行选择_Php_Mysql - Fatal编程技术网

Php 制作一个临时表并从中进行选择

Php 制作一个临时表并从中进行选择,php,mysql,Php,Mysql,运行此命令时,我收到一个错误“undeclared variable:temp” <?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(

运行此命令时,我收到一个错误“undeclared variable:temp”

<?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( ) );

第二个查询不正确

从参考资料中—

MySQL服务器不支持选择。。。转换到Sybase SQL表中 分机。相反,MySQL服务器支持。 标准SQL语法,基本上是一样的

试试这个-

INSERT INTO temp
SELECT live
     , id AS itineraryId
     , ship AS shipCode
     , description AS description
     , duration AS length
FROM
  cruises
WHERE
  live = 'Y'
。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果您选择PDO


此代码应适用于:

<?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());

我喜欢使用herdoc来帮助我构造嵌入式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;
mysql> #our query here line-by-line
关于临时变量的最后一件事是:检查关于其可见性的部分。 创建表时可以使用临时关键字。临时表仅对当前连接可见,并在连接关闭时自动删除。 http://dev.mysql.com/doc/refman/5.5/en/create-table.html

这意味着:当您直接连接到MySQL时,例如通过如下命令行界面:

$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;
mysql> #our query here line-by-line
然后,只要会话处于活动状态,通过所有多个查询,您基本上处于同一连接上

但是在一个外部脚本中(比如PHP),仅仅因为它在同一个脚本文件上并不一定意味着它是同一个连接,所以当您执行insert查询时,您的temp表对该连接会话不可见

尝试在一次命令/查询执行中对所有查询进行合并,并发送所有查询


祝你好运。

它是否也会告诉你在哪一行?我想你可能需要在创建时的同一查询中执行select into。as length
来自哪里?您没有在临时表中创建列
length
。。。(并不是说这可能会修复错误)它没有说哪一行,只是Sql错误:未声明的变量:tempyes我也需要把长度字段放进去,很好地发现@DaveRandomok我试过了,但它产生了相同的Sql错误:“field list”中的未知列“IntineralId”我刚刚对上述代码做了一个很小的更改,请重试(你上一次选择的
中有一个拼写错误-仔细查找多余的
n
)明白了…多余的n!完美的@DaveRandom,你就是那个人!荣誉:)