如何根据第一个过程的结果运行第二个cURL过程?
我正在使用curl运行SQL查询以便在数据库中创建表。这里是工作代码:如何根据第一个过程的结果运行第二个cURL过程?
// defines the post vars
$apikey = $_POST['apikey'];
$username = $_POST['username'];
$tablename = $_POST['tablename'];
//SQL create table statment
$sql = "CREATE TABLE " . (string)$tablename . " (post_id integer, post_title text, post_content text, post_date date, post_type text, permalink_guid text);";
$sql2 = "SELECT cdb_cartodbfytable('" . (string)$tablename . "');";
// initializing curl
$ch = curl_init("https://".$username.".cartodb.com/api/v2/sql");
$query = http_build_query(array('q'=>$sql,'api_key'=>$apikey));
$query2 = http_build_query(array('q'=>$sql2,'api_key'=>$apikey));
// configuring curl options
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//result
$result_jsonstring = curl_exec($ch);
$result = json_decode($result_jsonstring);
echo(print_r($result));
有了这段代码,我可以得到一个两个成功的回应。如果表创建成功:
stdClass Object
(
[rows] => Array
(
)
[time] => 0.013
[fields] => stdClass Object
(
)
[total_rows] => 0
)
1
如果表名在数据库中已存在,我得到这个:
stdClass Object
(
[error] => Array
(
[0] => relation "tablename" already exists
)
)
1
我也可以成功运行第二个查询替换curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
与curl_setopt($ch, CURLOPT_POSTFIELDS, $query2);
我遇到的问题是如果第一个查询成功(创建表,但不存在时运行),则获取第二个查询以运行。这里是我试图实现这一点的代码:第二卷曲请求是不工作 1):
// defines the post vars
$apikey = $_POST['apikey'];
$username = $_POST['username'];
$tablename = $_POST['tablename'];
//SQL create table statment
$sql = "CREATE TABLE " . (string)$tablename . " (post_id integer, post_title text, post_content text, post_date date, post_type text, permalink_guid text);";
// initializing curl
$ch = curl_init("https://".$username.".cartodb.com/api/v2/sql");
$query = http_build_query(array('q'=>$sql,'api_key'=>$apikey));
// configuring curl options
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//result
$result_jsonstring = curl_exec($ch);
//close the curl session
curl_close($ch);
if (TRUE === $result_jsonstring)
echo "It was true!";
echo(print_r($result_jsonstring));
ch2 = curl_init("https://".$username.".cartodb.com/api/v2/sql");
$sql2 = "SELECT cdb_cartodbfytable('" . (string)$tablename . "');";
$query2 = http_build_query(array('q'=>$sql2,'api_key'=>$apikey));
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query2);
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result_jsonstring2 = curl_exec($ch2);
echo(print_r($result_jsonstring2));
curl_close($ch2);
这里是我与此具有的问题。我收到一条消息,说我必须“提供一个SQL查询”,我不知道为什么。我确实得到了“这是真的!”声明然而。 2)我一直在回复结束时得到数字1。在最后的情况下,我得到两个(11)。
{"rows":[],"time":0.008,"fields":{},"total_rows":0}It was true!11{"error":["You must indicate a sql query"]}11
只有成功创建表后,如何成功运行第二个卷曲过程?
将两个最后的curl_setop更改为使用$ ch2而不是$ ch。
哈谢谢!我完全不能相信,就是这样。任何想法如何消除1我在响应结束时得到? –
我的猜测是,1的来自你使用回声布尔值真正print_r返回后,它打印回应。因此,测试没有回声功能... – Pafjo
你是对的,这是1的来源。虽然我认为echo是在响应中生成json代码输出,而这显然是从别的东西中派生出来的。我怎样才能防止出现? –
对不起,这个问题太长了,只是为了简洁。 :) –
如果将cURL封装在函数/类 - >方法中,并且使其可重用,那么您将非常有用。它可以返回false或数组,然后您可以将您的下一个操作基于该响应。您可以使用相同的cURL函数在第一次成功时再次调用。它将帮助您保持一致的数据完整性。你会知道该函数会返回一个或另一个。只是一个建议。 – Rasclatt
感谢您的建议。尽管(对此很新颖),但必须要Google。 –