PHP/SQL,简单选择从何处获取;“价值”;列

PHP/SQL,简单选择从何处获取;“价值”;列,php,mysql,Php,Mysql,返回: “where子句”中的未知列“proot” 同: $account = "proot"; $sql_check_account = mysqli_query($connect, "SELECT username FROM proot_accounts WHERE username = $account"); if(!$sql_check_account) die(mysqli_error($connect)); 或 什么可以使变量$

返回:

“where子句”中的未知列“proot”

同:

$account = "proot"; 

        $sql_check_account = mysqli_query($connect, "SELECT username FROM proot_accounts WHERE username = $account");

    if(!$sql_check_account)
            die(mysqli_error($connect));

什么可以使变量$account作为列执行?我不明白这里的问题


谢谢

你需要在它周围加上引号

 $sql_check_account = mysqli_query($connect, "SELECT username FROM proot_accounts WHERE username =".$account);

您还应该探索PHP中准备好的SQL语句。它们将省去许多格式方面的麻烦。

您需要在其周围加上引号

 $sql_check_account = mysqli_query($connect, "SELECT username FROM proot_accounts WHERE username =".$account);

您还应该探索PHP中准备好的SQL语句。它们将省去很多格式方面的麻烦。

我认为这是一个引用问题。这:

mysqli_query($connect, "SELECT username FROM proot_accounts WHERE username = '$account'");
将为您获取以下字符串:

从username=proot的proot\u帐户中选择username

在本例中,MySQL认为proot是一个列名,因为proot根本不在引号中

这:

将为您获取以下字符串:

从proot\u帐户中选择用户名,其中username=“proot”

在这种情况下,MySQL可能仍然认为“proot”是一个列名,这取决于SQL模式。由于在使用此代码时仍会遇到相同的错误,因此数据库似乎已设置为模式。在此模式下,引号内的文本将被解释为列标识符,而不是文字值

使用此选项:

'SELECT username FROM proot_accounts WHERE username = "'.$account.'"'
将为您获取以下字符串:

从proot_帐户中选择用户名,其中用户名='proot'


使用
而不是
应确保MySQL将
proot
视为文本值而不是列标识符,无论SQL模式如何。

我认为这是一个引用问题。这是:

mysqli_query($connect, "SELECT username FROM proot_accounts WHERE username = '$account'");
将为您获取以下字符串:

从username=proot的proot\u帐户中选择username

在本例中,MySQL认为proot是一个列名,因为proot根本不在引号中

这:

将为您获取以下字符串:

从proot\u帐户中选择用户名,其中username=“proot”

在这种情况下,MySQL可能仍然认为“proot”是一个列名,这取决于SQL模式。因为在使用此代码时仍然会出现相同的错误,所以看起来您的数据库被设置为模式。在这种模式下,引号内的文本将被解释为列标识符,而不是文本值

使用此选项:

'SELECT username FROM proot_accounts WHERE username = "'.$account.'"'
将为您获取以下字符串:

从proot_帐户中选择用户名,其中用户名='proot'



使用
而不是
应该确保MySQL将
proot
视为一个文本值,而不是列标识符,而不管SQL模式如何。

尝试将proot\u帐户包含在backticks中,即“`”您的第二个示例应该可以工作。您好,谢谢您的时间,同样的反勾号错误和第二个示例不起作用:(反勾号用于mysql列/表名。您正在尝试比较
VARCHAR
值。请参阅下面的答案。您的
$account
中是否有引号
/
?尝试将proot\u帐户包含在反勾号ie中”`“您的第二个示例应该可以运行。您好,谢谢您的时间,backticks和第二个示例的相同错误将不起作用:(backticks用于mysql列/表名。您正在尝试比较
VARCHAR
值。请参阅下面的我的答案。您的
$account
中是否有引号
/
?这与OPs第二个示例有何不同?之所以不同,是因为它生成了一个带有引号的SQL语句。您需要
username=“value”
而不是
username=value
您是否仍在“where子句”中获得
未知列“proot”
?回显您正在生成的查询并共享结果。在那里:“where子句”中的未知列“proot”这不会创建与OPs不同的语句
选择…where username=“.”account““
这与OPs第二个示例有何不同?之所以不同,是因为它生成了一个带有引号的SQL语句。您需要
username=“value”
而不是
username=value
您是否仍然在“where子句”中获得
未知列“proot”
?回显您正在生成的查询并共享结果。在那里:“where子句”中的未知列“proot”这不会创建与OPs不同的语句
选择…where username=“.$account.”