php curl获取mysql数据 - 只返回一行

时间:2014-03-17 19:36:38

标签: php mysql curl

我正在使用curl从我的一个站点获取mysql数据到另一个站点。代码是

$ch = curl_init();
$myurl = "http://domain.com/account.php?siteid=$siteid";
curl_setopt ($ch, CURLOPT_URL, $myurl);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $siteref);

$file_contents = curl_exec($ch);
curl_close($ch);

$data=unserialize($file_contents);
print_r($data);

其他网站account.php上的代码

$q=mysql_query("SELECT * FROM `".$siteid."`");
$data=mysql_fetch_array($q);
echo serialize($data);

问题是我只从表中获得第一条记录。我希望将表的全部内容发回。我怎么能这样做?

4 个答案:

答案 0 :(得分:1)

您需要一个循环来存储每个数组。 mysql_fetch_array一次只返回一行。

while ($data=mysql_fetch_array($q)) {
     $dataRows[] = $data;
}
echo serialize($dataRows);

此外,现在不推荐使用所有mysql函数。请查看mysqliPDO

答案 1 :(得分:1)

来自docs

  

mysql_fetch_array - 将结果行作为关联数组,数字数组或两者获取

除非你循环来自mysql_query的结果,否则你只会得到一行。尝试以下方面:

$q = mysql_query("SELECT * FROM `" . $siteid . "`");
$data = array();
while($row = mysql_fetch_array($q)) {
   $data[] = $row;
}

但是,再次查看该文档页面,您会发现一个大红色警告,表示您不应再使用mysql扩展名。相反,您应该使用PDOmysqli构建应用程序。

答案 2 :(得分:0)

这包含在您的account.php文件中:

(从数据库中提取多条记录,你应该使用循环)

    $q=mysql_query("SELECT * FROM `".$siteid."`");
    if(mysql_num_rows($q) >= 1) {
       while($data = mysql_fetch_array($q)) {
          echo serialize($data);
       }
    } else { echo "there are no rows"; }

同样使用mysql_num_rows是一种很好的故障安全方法。


自PHP 5.4起,所有mysql_函数均已弃用,不安全且不再推荐,请考虑使用PDOmysqli代替!

答案 3 :(得分:0)

您只从结果集中获取一行数据。如果需要所有行,则需要在循环结构中读出结果集。通常看起来像这样:

$q=mysql_query("SELECT * FROM `".$siteid."`");
$data = array();
while($row = mysql_fetch_array($q)) {
    $data[] = $row;
}
echo serialize($data);

一些重要的注意事项:

  • 您不应该使用mysql_*函数,因为它们已被弃用。请考虑使用mysqliPDO代替。
  • 虽然没有显示,但我猜你当前有一个SQL注入漏洞,所以你需要确保在查询中使用它之前清理$siteid
  • 您真的应该在脚本中添加错误处理。检查查询失败或数据库连接失败并正确处理它们的情况。