【问题标题】:How get data by cURL in look with waiting for result?如何在等待结果的情况下通过 cURL 获取数据?
【发布时间】:2018-04-05 01:36:44
【问题描述】:

我有一个 ID 列表。对于测试,这大约是 20 项。

现在我想创建一个循环并从另一台服务器获取额外的数据。在这台服务器上,我准备了一个脚本 - 当你向它发送一个项目 ID 时,它会以 JSON 格式发回更多详细信息。

while($row = mysql_fetch_array($result)){   
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://test.mysite.abc/call/itemdetail/id/".$row['id_item']);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $ret = curl_exec ($ch);
    curl_close ($ch);

    $result = json_decode($ret, true);

    print_r($result);
    vecho "<br>";
}

当我访问 mysite.abc 时,我会在给出项目 ID 时看到结果。但是当我运行脚本时,有时我有 1 个结果或 3 个结果和消息:

警告:mysql_fetch_array() 期望参数 1 是资源、数组 在第 65 行的 C:\wamp64\www\testfile.php 中给出

我应该怎么做?

【问题讨论】:

  • 为什么要使用早已弃用的mysql_ 代码库?它在多年前就停产了,并在 PHP7 中完全删除。不应使用此库编写新代码。它使您容易受到 SQL 注入攻击(由于缺乏参数化查询支持)和潜在的其他未修补漏洞。尽快切换到使用mysqliPDO,然后学习如何编写参数化查询来保护您的数据免受恶意输入。请参阅bobby-tables.com 以获得对风险的简单说明以及一些用于安全编写查询的示例 PHP 代码。
  • 对于错误本身,这意味着 $result 不是有效的结果集。据推测,您的查询由于某种原因失败了,并且您可能没有检查 mysql 错误(这应该在您运行查询之后但在开始循环之前完成)
  • 这是 5 年前某人写的遗产。现在我在 mysqli 所有功能上替换了 mysql 并打开了 php7 但现在我们测试旧系统,如果测试可以,我们开始在 php7 上运行。我会从 mysql 中检查这个错误

标签: php curl


【解决方案1】:

检查mysql_query 返回了一个有效的resource 类型。

$result = mysql_query('SELECT column1, column2 FROM table WHERE 1=1'); // Change the SQL query with your

if ($result) {
    while($row = mysql_fetch_array($result)){   
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "http://test.mysite.abc/call/itemdetail/id/".$row['id_item']);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $ret = curl_exec ($ch);
        curl_close ($ch);

        $result = json_decode($ret, true);

        print_r($result);
        echo "<br>";
    }
}

最佳实践:,避免 mysql_* 扩展。此扩展在 PHP 5.5.0 中被弃用,并在 PHP 7.0.0 中被删除。相反,请使用 MySQLi 或 PDO_MySQL 扩展。

考虑为您的情况使用多卷曲。查看answer 了解更多详情。

干杯!!

【讨论】:

    猜你喜欢
    • 2016-07-23
    • 1970-01-01
    • 2021-12-19
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    相关资源
    最近更新 更多