gpt4 book ai didi

mysql - 列名前的 SQL 语句中的 At-Sign

转载 作者:可可西里 更新时间:2023-11-01 06:29:41 24 4
gpt4 key购买 nike

我在 PHP 文件中有一个 INSERT 语句,其中 at 符号 (@) 出现在列名称的前面。

@field1, @field2,

这是一个MySQL数据库。 at 符号是什么意思?

编辑:
PHP 脚本中没有 SET @field1 := 'test'。 PHP 脚本读取一个 csv 并将数据放入表中。它会被滥用为注释功能吗?

<?php
$typo_db_username = 'xyz'; // Modified or inserted by TYPO3 Install Tool.
$typo_db_password = 'xyz'; // Modified or inserted by TYPO3 Install Tool.

// login
$_SESSION['host'] = "localhost";
$_SESSION['port'] = "3306";
$_SESSION['user'] = $typo_db_username;
$_SESSION['password'] = $typo_db_password;
$_SESSION['dbname'] = "database";


$cxn = mysqli_connect($_SESSION['host'], $_SESSION['user'], $_SESSION['password'], $_SESSION['dbname'], $_SESSION['port']) or die ("SQL Error:" . mysqli_connect_error() );
mysqli_query($cxn, "SET NAMES utf8");

$sqltrunc = "TRUNCATE TABLE tablename";
$resulttrunc = mysqli_query($cxn,$sqltrunc) or die ("Couldn’t execute query: ".mysqli_error($cxn));

$sql1 = "
LOAD DATA LOCAL
INFILE 'import.csv'
REPLACE
INTO TABLE tablename
FIELDS
TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '\"'
IGNORE 1 LINES
(
`normalField`,
@field1,
@field2,
`normalField2`,
@field3,
@field4
)";

$result1 = mysqli_query($cxn,$sql1) or die ("Couldn’t execute query: " . mysqli_error($cxn));


?>'

解决方案:

终于找到了! @ 字段用作虚拟字段以遗漏 csv 文件中的列。参见 http://www.php-resource.de/forum/showthread/t-97082.htmlhttp://dev.mysql.com/doc/refman/5.0/en/load-data.html

最佳答案

@ 符号是 SQL 中的一个变量。

在 MySQL 中,它用于在连续运行的查询之间存储一个值,或者在两个不同的查询之间传输数据。

一个例子

在两个查询之间传输数据

SELECT @biggest:= MAX(field1) FROM atable;
SELECT * FROM bigger_table WHERE field1 > @biggest;

另一个用途是排名,MySQL 没有原生支持。

存储连续运行查询的值

INSERT INTO table2
SELECT @rank := @rank + 1, table1.* FROM table1
JOIN( SELECT @rank := 0 ) AS init
ORDER BY number_of_users DESC

请注意,为了使其工作,查询中处理行的顺序必须固定,很容易出错。

参见:
http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
mysql sorting and ranking statement
http://www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/

更新
此代码永远不会工作。
您之前刚刚打开连接,但没有设置@fields。
所以目前它们持有 null 值。
最重要的是,您不能使用@vars 来表示字段名,您可以使用@vars 来表示值。

$sql1 = "
LOAD DATA LOCAL INFILE 'import.csv'
REPLACE INTO TABLE tablename
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"'
IGNORE 1 LINES
(`normalField`, @field1, @field2, `normalField2`, @field3, @field4)";

关于mysql - 列名前的 SQL 语句中的 At-Sign,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7230068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com