从数据库查询php

时间:2014-03-14 09:19:22

标签: php mysql

如果这是一个重复的问题,我道歉。我已经阅读了一些我认为可能对我有帮助的帖子,但我自己也被迫开了一个。

这是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程序员,如果这是一个微不足道的问题我会道歉。

3 个答案:

答案 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类中找到查询函数并使用它,因为实际上可能已经使用mysqliPDO进行连接。


作为一个程序问题,您可能希望对表名执行类似的操作:

$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);
   }