Php INSERT INTO sql查询使用变量字符串而不是字段名
对于插入到中的内容感到非常困惑。它应该在表中插入三个字段,Php INSERT INTO sql查询使用变量字符串而不是字段名,php,sql,Php,Sql,对于插入到中的内容感到非常困惑。它应该在表中插入三个字段,userID,activateKey和isActivated activateKey是一个25个字母的随机生成的密钥,如63n20kw24ba1mlox34e8n2awv userID来自另一个表,由auto_increment设置 在此阶段,isActivated始终为0 这似乎是一个非常简单的INSERT语句 if (!mysqli_query($con,"INSERT INTO activations (userID,activat
userID
,activateKey
和isActivated
activateKey是一个25个字母的随机生成的密钥,如63n20kw24ba1mlox34e8n2awv
userID来自另一个表,由auto_increment设置
在此阶段,isActivated始终为0
这似乎是一个非常简单的INSERT语句
if (!mysqli_query($con,"INSERT INTO activations (userID,activationKey,isActivated) VALUES (".$userID.",".$activateKey.",'0')"))
{
echo("Error description: " . mysqli_error($con));
}
但是,当我包含$activateKey
字段时,它不起作用。它所做的是尝试将字符串变量$activateKey
作为列名搜索。我得到的错误是:
Error description: Unknown column '63n20kw24ba1mlox34e8n2awv' in 'field list'
当然,没有像63n20kw24ba1mlox34e8n2awv
这样的列,这是我试图插入的数据,因此它位于VALUES
部分。你知道为什么它要把这个作为列名来搜索吗
编辑以澄清:var是激活键,列名是激活键我会将查询放在不同的变量中以避免混淆,PHP会自动用双引号替换字符串中的变量名 试试这个:
<?php
$query = "INSERT INTO activations (userID,activationKey,isActivated) VALUES($userID,'$activateKey','0')
if (!mysqli_query($con,$query)
{
echo("Error description: " . mysqli_error($con));
}
已解决
这是一种未正确地将动态字段(值部分中的变量)包装为记号的情况:
if (!mysqli_query($con,"INSERT INTO activations (userID,activationKey,isActivated) VALUES ('".$userID."','".$activateKey."','0')"))
而不是
if (!mysqli_query($con,"INSERT INTO activations (userID,activationKey,isActivated) VALUES (".$userID.",".$activateKey.",'0')"))
可能很难发现。变量仍然需要“在刻度中”,否则它们不会注册为字符串。您没有用引号括住这些值,这就是为什么它们会被解释为变量名。
使用单引号,如下所示:
"INSERT INTO activations (userID,activationKey,isActivated) VALUES
('".$userID."','".$activateKey."','0')"
但是,请注意,将查询字符串串在一起会使您暴露于以下情况:如果这是代码中的一个问题,那么您应该这样做。事实上,使用参数化查询总是更好。因为activationKey
是字符串
列,所以必须对$activationKey
使用单引号
尝试:
if (!mysqli_query($con,"INSERT INTO activations (userID,activationKey,isActivated)
VALUES (".$userID.",'".$activateKey."','0')"))
将查询更改为:
"INSERT INTO activations
(userID,activationKey,isActivated)
VALUES ('$userID','$activateKey','0')"
您不需要使用串联(
)运算符,因为变量将插入字符串中
单引号告诉mysql将变量视为文本而不是列名
作为补充说明,最好使用参数化查询。请参见对不起,我将编辑。正确的var是activateKey
。列名是activationKey
-我将它们更改为不同的名称,以尝试避免两者之间的混淆,但我似乎做了相反的事情!谢谢这是最清楚的答案。我将研究参数化查询,尽管它看起来像是对mysqli使用面向对象的方法,而我使用的是过程式的?它可以是面向对象的或过程式的,请参见