0

我正在查询我的数据库并且recordID是一个 int。当我回显它的值时,我有这行代码$content['recordID']打印出一个数值,但是当我把它放在这里时,我得到了这个错误:

语法错误,意外的 T_ENCAPSED_AND_WHITESPACE,需要 T_STRING 或 T_VARIABLE 或 T_NUM_STRING。

但是如果我$content['recordID']用数值替换它可以正常工作

$sqlCommentAmount = "SELECT * FROM `info` WHERE `recordID` = $content['recordID']";
4

4 回答 4

2

去掉''里面的[]

... $content[recordID]";

请参阅文档示例 #8: http: //php.net/manual/en/language.types.string.php#language.types.string.parsing.simple

Example #8 简单语法示例

<?php
$juices = array("apple", "orange", "koolaid1" => "purple");

echo "He drank some $juices[0] juice.".PHP_EOL;
echo "He drank some $juices[1] juice.".PHP_EOL;
echo "He drank some juice made of $juice[0]s.".PHP_EOL; // Won't work
echo "He drank some $juices[koolaid1] juice.".PHP_EOL;
(...)

上面的示例将输出:

He drank some apple juice.
He drank some orange juice.
He drank some juice made of s.
He drank some purple juice.
(...)    

For anything more complex, you should use the complex syntax.
于 2013-08-19T23:43:30.537 回答
2

访问内插字符串中的关联数组值和对象属性需要在名称周围使用波浪形括号(大括号):

$sqlCommentAmount = "SELECT * FROM `info` WHERE `recordID` = {$content['recordID']}";

来源(PHP:字符串)

任何具有字符串表示的标量变量、数组元素或对象属性都可以通过此语法包含在内。只需将表达式写成与它出现在字符串之外的相同方式,然后将其包装在 { 和 } 中。

附带说明一下,您应该真正使用PDO并编写如下准备好的语句:

$sqlCommentAmount = "SELECT * FROM `info` WHERE `recordID` = :recordID;";

然后,您将通过准备语句来绑定参数:

// ... initialize $db
$stmtCommentAmount = $db->prepare($sqlCommentAmount);
$stmtCommentAmount->bindValue(':recordID', $content['recordID'], PDO::PARAM_INT);
$stmtCommentAmount->execute();

使用您的原始代码,如果您完全确定它$content是一个整数,那么它是相对安全的,但如果它是通过$_GET(例如)传递的,那么您的代码很容易受到 SQL 注入的攻击。

于 2013-08-19T23:49:15.160 回答
0

$content['recordID']是你的问题。

你需要去掉recordID我认为的引号。

于 2013-08-19T23:45:24.130 回答
0

双引号中的变量可能会导致问题。相反,我会尝试

$sqlCommentAmount = "SELECT * FROM info WHERE recordID = " .$content['recordID'];

或者

$sqlCommentAmount = "SELECT * FROM info WHERE recordID = ${content['recordID']}";
于 2013-08-19T23:47:58.283 回答