SQL语法只有两种类型的引号发出?

时间:2018-10-18 18:56:23

标签: php html mysql sql mysqli

我有以下PHP行,其中包含已建立的连接以及所有内容。它给了我以下错误:

grecaptcha.execute(recaptcha_id)

代码如下:

( ! ) Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\UwAmp\www\dxlphin\index.php on line 174

有指导吗?尽管我已经尽了最大努力,但是这种语法对我来说还是太复杂了……

谢谢

3 个答案:

答案 0 :(得分:2)

这是更好的选择:

$sql = "SELECT id, name, price, location FROM products WHERE name LIKE ?";

然后准备该语句,并将值与附加的通配符("%$_POST[search]%")绑定。


如果要将带有字符串键的数组放在这样的字符串中(这很好,但不适用于将用户数据插入SQL字符串,正如其他人也指出的那样),则需要省略引号在键上,除非您将变量放在方括号中。这就是为什么您会收到语法错误的原因。并不需要串联运算符(.),因为变量已经在字符串中。

$string = "some text '$array[key]' and so on";

OR

$string = "some text '{$array['key']}' and so on";

但实际上,无论如何,这都不是SQL的方法,仅供参考,以了解如何使用字符串。

答案 1 :(得分:1)

您正在混合使用引号和双引号

$sql = "SELECT id, name, price, location FROM products WHERE name LIKE '%".$_POST['search']."%'";

但是,您的代码非常不安全。正如注释中所建议的那样,您应该使用预处理语句来避免SQL注入。

例如,使用PDO(http://php.net/manual/en/class.pdo.php):

$pdo = new PDO(<dsn>); // Check the manual to see how to build your dsn
$query = $pdo->prepare("SELECT id, name, price, location FROM products WHERE name LIKE :searchTerm");
$query->execute([':searchTerm' => "%" . $_POST['search'] . "%"]);

答案 2 :(得分:0)

在连接之前,您必须以任何开头的引号结束。因此,由于您的字符串以"开始,因此在连接"之前应以.$_P...结尾。您的行应为:

$sql = "SELECT id, name, price, location FROM products WHERE name LIKE '%".$_POST['search']."%'";

请注意,将变量从$_POST直接传递到数据库以避免SQL注入是错误的。