PHP SQL查询中的JSON问题


Issue with JSON in a PHP SQL query

我有一个server.php文件,它应该返回一个int表。这些int中的每一个都链接到一个键(某些int可以具有相同的键)。该表只需要包含链接到特定键的int。

要获得其中一个键,我需要有另一个键作为参数。

所以这个过程是:

服务器由$http.post调用(我使用的是AngularJS):

$http.post('server.php', {"data" : parameterKey, "serverFlag" : 4})

(serverFlag尚未使用,parameterKey为字符串)

然后我使用parameterKey获得另一个密钥:

$data = file_get_contents("php://input");
$objData = json_decode($data);
$conn = new PDO(/*something*/);
$outp = [];
$anotherKey  = $conn->query("SELECT anotherKey FROM myTable1 WHERE parameterKey = $objData->data");
$anotherKey  = $anotherKey ->fetch();

然后,我使用另一个密钥来收集所有链接到此密钥的int:

$result = $conn->query("SELECT myInt FROM myTable2 WHERE id = $anotherKey  ORDER BY myInt ASC");
while($rs = $result->fetch()) {
        if ($outp != "") {
            array_push($outp,$rs["myInt"]);
        }
}
$outp =json_encode($outp);
echo($outp);

(我不知道到目前为止我是否已经说得很清楚了…)

所以我在运行这个时出现了一个JSON错误:

Error: JSON.parse: unexpected character at line 1 column 1 of the JSON data

我真的不确定错误在哪里。有什么想法吗?

编辑

我有以下错误:

Fatal error: Call to a member function fetch() on boolean in C:'wamp64  'www'tests'server.php on line <i>47</i> 
(line 47 =  $anotherKey  = $anotherKey ->fetch();)

您以错误的方式插入字符串:

$anotherKey  = $conn->query("SELECT anotherKey FROM myTable1 WHERE parameterKey = $objData->data");

请注意您是如何直接呼叫$objData->data的。你应该这样做:

$anotherKey  = $conn->query("SELECT anotherKey FROM myTable1 WHERE parameterKey = {$objData->data}");

在PHP中,您只能在字符串中插入变量。如果您引用的是对象属性或数组项/字典键,则必须将它们包含在{}中。所以这是有效的:

$myInterpolatedString = "This is a string with a $variable";

这是有效的:

$myInterpolatedString = "This is a string with a {$object->property}";

而这不是:

$myIncorrectlyInterpolatedString = "This is a string with $object->property";

编辑:从更安全的角度来看,您永远不应该将输入中的任何内容直接提供给查询,因为您将面临安全威胁(SQL注入)。考虑使用事先准备好的语句!