【问题标题】:An error when I add a variable to a string [duplicate]将变量添加到字符串时出错[重复]
【发布时间】:2014-12-04 19:41:34
【问题描述】:

我有这行 SQL:

$sql = "SELECT ID, ListStID, ListEmail, Title FROM $entry_database WHERE ID = '". $ReqBookID ."'";
$result = mysqli_query($conn, $sql);

如您所见,如果 ID 等于用户在表单中给出的一串数字(或文本),我将选择条目的 ID、ListStID、ListEmail 和标题列。

一切正常,我写代码时没有出现任何语法错误(我使用的是代码编辑器软件。但是,当我在线使用时,我得到了这个错误:

错误:SELECT ID、ListStID、ListEmail、Title FROM WHERE ID = '4' You 您的 SQL 语法有错误;检查对应的手册 您的 MariaDB 服务器版本,以便在“WHERE ID”附近使用正确的语法 = '4'' 在第 1 行

我对 PHP 很陌生,我确定我要添加额外的 ' 或 ",所以如果您能帮助我解决这个问题,我将不胜感激。我已经尝试了类似问题的答案,但没有成功了。

【问题讨论】:

  • $entry_database 是空的,你没看到吗? ... FROM WHERE ... 应该是 ... FROM some_table WHERE ...
  • 我不得不指出,如果 $ReqBookID 可能是恶意值,您就有可能进行某些 SQL 注入。您可能还会发现,准备声明可以简化它的工作方式。
  • 要么你没有定义$entry_database,要么你不应该在那里登录$。我认为 50% 是对的 ;)
  • @Fred-ii- 在这种情况下 50% 正确!
  • 哈哈哈!!老师的战斗!! :P :P 感谢你们两个偷看:)

标签: php


【解决方案1】:

您有空的 $entry_database 变量。正如您在错误中看到的那样:ListEmail, Title FROM WHERE IDbewteen FROMWHERE 应该是表的名称。 SELECT 的正确语法:

SELECT columns FROM table [optional things as WHERE/ORDER/GROUP/JOIN etc]

按照你的方式应该变成:

SELECT ID, ListStID, ListEmail, Title FROM some_table_you_got WHERE ID = '4'

【讨论】:

  • 好吧,那是我的愚蠢。 entry_database 是表名,我错误地添加了 $。非常感谢你@Forien。传奇!!!
  • @Sep Just like I said... - 眨眼。
  • LOL @Fred-ii- 另一个很棒的提示!! :) 我很欣赏智慧的话! :)
  • @Fred-ii- 我想你不知道为什么我的代码会抛出更新错误? :) 非常感谢
  • @Fred-ii- Np :) 感谢您的尝试
【解决方案2】:

您缺少数据库名称:

$sql = "SELECT ID, ListStID, ListEmail, Title FROM ".$entry_database." WHERE ID = ". $ReqBookID .";

并确保 $entry_database 不为空或为空:

var_dump($entry_database);

另请注意,您不需要将 $ReqBookID 放在 '' 中,就好像它是一个 Int 一样。

【讨论】:

  • 在双引号内,将读取变量。因此,只要设置了$entry_database,他的字符串就可以很好地构造。
  • 是的,我知道,这只是我的惯例,总是".$variable." 的东西为了易读性。
  • 感谢您的回复@TimLewis,entry_database 是我的表。我不知道为什么我旁边有美元。那么sql语句怎么写呢?
  • $sql = "SELECT ID, ListStID, ListEmail, Title FROM entry_database WHERE ID = ". $ReqBookID ."; 像这样。又好又简单!
  • @TimLewis 您提供的行不起作用。我认为它缺少一个 " 某处。
【解决方案3】:

当我们不给数据库值加上单引号或双引号时,也会出现这个问题。

错误的方式:

$query ="INSERT INTO tabel_name VALUE ($value1,$value2)";

由于数据库插入值必须用引号引起来 ' '/" "

正道:

$query ="INSERT INTO STUDENT VALUE ('$roll_no','$name','$class')";

【讨论】:

  • 这个答案是灾难性的错误。无论是否使用引号,您都不会首先将变量添加到查询中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
  • 2014-02-18
  • 1970-01-01
相关资源
最近更新 更多