如果这是一个重复的问题,我道歉。我已经阅读了一些我认为可能对我有帮助的帖子,但我自己也被迫开了一个。
这是php文件:
<?php
$table = $_GET['table'];
$clientID = $_GET['clientID'];
include 'connection.php';
$DB = new DBConfig();
$DB -> config();
$DB -> conn('host.de','user','password','dbname');
$res=mysql_query("SET NAMES 'utf8'");
$sth = mysql_query("SELECT * FROM $table where id = $clientID");
$rows = array();
while($r = mysql_fetch_assoc($sth)) {
$rows[] = $r;
}
print json_encode($rows);
?>
这是错误:mysql_fetch_assoc()期望参数1是资源,在...中给出布尔值
请注意,我不是一名php程序员,如果这是一个微不足道的问题我会道歉。
答案 0 :(得分:1)
以下是 按预期工作的代码的修改版本。我已删除对DBConfig
的引用,因为我不知道该代码,而且它不是标准库。为了理智,我加了一些卫生设施。这不是#34;如何使您的代码正常工作的答案,而是对如何使您的代码与您正在尝试使用的功能一起工作的答案#34;。 / p>
<?php
$table = mysql_real_escape_string(trim($_GET['table']));
$clientID = mysql_real_escape_string(trim($_GET['clientID']));
mysql_connect('host.de','user','password');
mysql_select_db('dbname');
$res = mysql_query("SET NAMES 'utf8'");
$sth = mysql_query("SELECT * FROM `{$table}` where id = '{$clientID}'");
$rows = array();
while ($sth AND $r = mysql_fetch_assoc($sth)) {
$rows[] = $r;
}
print json_encode($rows);
?>
你不应该再使用mysql_
函数了。您应该使用mysqli_
函数或PDO
库来代替。虽然我不会经历所需的长度 - 你应该能够很容易地找到这方面的教程。
你应该做的是在DBConfig类中找到查询函数并使用它,因为实际上可能已经使用mysqli
或PDO
进行连接。
作为一个程序问题,您可能希望对表名执行类似的操作:
$table = urldecode(trim($_GET['table']));
switch ($table) {
case "foo": $table = "table_foo"; break;
case "bar": $table = "table_bar"; break;
default: die(); // invalid table requested
}
这里的要点是您传递表名的标识符而不是实际的表名,并且从未使用为其提供的输入。
答案 1 :(得分:0)
用此替换您的查询并尝试
$sth = mysql_query("SELECT * FROM {$table} where id = {$clientID}");
答案 2 :(得分:-1)
执行前检查$sth
是否为空:
if ($sth) /* if $sth have value then "fetch" */
{
while($r = mysql_fetch_assoc($sth)) {
$rows[] = $r;
}
print json_encode($rows);
}