Mysql 列名前的At登录SQL语句

Mysql 列名前的At登录SQL语句,mysql,sql,symbols,at-command,Mysql,Sql,Symbols,At Command,我在PHP文件中有一个INSERT语句,其中at符号(@)出现在列名前面 @字段1, @字段2 这是一个MySQL数据库。at标志是什么意思 编辑: PHP脚本中没有设置@field1:=“test”。PHP脚本读取csv并将数据放入表中。它可以被误用为一个评论功能吗 <?php $typo_db_username = 'xyz'; // Modified or inserted by TYPO3 Install Tool. $typo_db_password = 'xyz'; //

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

@字段1, @字段2

这是一个MySQL数据库。at标志是什么意思

编辑:
PHP脚本中没有设置@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));


?>'

符号是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
请注意,为了使其工作,必须固定查询中处理行的顺序,很容易出错

请参阅:


更新
此代码永远不会工作。
您之前刚刚打开连接,没有设置@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)";

@测试-我看到你在自己的问题中添加了一个“可能的重复项”,因此在这个基础上进行了接近票数的投票。你能澄清一下这是否回答了你的问题吗?这不是一个骗局,链接询问了正常var和
@var
,,此问题询问查询中的
@xyz
是什么意思。如果在查询中包含相关的php代码,则更容易获得具体信息。该值的可能副本可以存储在另一个php脚本中吗?它可以跨php文件的边界使用吗?因为在我拥有的脚本中从未设置值…否,
@vars
是特定于连接的。你不能在连接之间传输它们。脚本不是我写的。我必须纠正它。。。您的意思是导入空值。这有什么后果?最好的解决方案是替换或删除这些字段?我的意思是代码永远不会工作,因为这是一个语法和逻辑错误。我将用字段的文字名称替换
@field
。如果您坚持使用动态字段名,请先阅读此问题:并确保在注入这些字段名之前将其列为白名单。