我一直试图解决这个问题已经好几个小时了,只是无法弄清楚我在这里做错了什么。循环不会循环(没有什么是回声' d)但是当我在phpmyadmin中运行查询时,它工作正常。 数据库信息也很好。 不幸的是,mysqli根本没有输出任何错误......
非常感谢任何帮助!
<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);
set_time_limit(0);
$db = new mysqli('localhost', 'xxx', 'xxx', 'xxx');
if($db->connect_errno > 0){
die('Unable to connect to database [' . $db->connect_error . ']');
}
$sql = <<<SQL
SELECT * FROM
`zips`
SQL;
if(!$result = $db->query($sql,MYSQLI_STORE_RESULT)){
echo $result->num_rows; // nothing outputted here
while($row = $result->fetch_assoc()){
$zip = $row['zip'];
$url = "http://www.webservicex.net/uszip.asmx/GetInfoByZIP?USZip=".$zip;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
$xmlobj = simplexml_load_string($result);
$city = $xmlobj->Table->CITY;
$state = $xmlobj->Table->STATE;
$timezone = $xmlobj->Table->TIME_ZONE;
$areacode = $xmlobj->Table->AREA_CODE;
echo "city:" . $city;die();
$sql2 = <<<SQL
INSERT INTO zips
(zip,city,state,timezone,areacode)
VALUES('{$zip}','{$city}','{$state}', '{$timezone}', '{$areacode}')
SQL;
if(!$result2 = $db->query($sql2)){
die('There was an error running the query [' . $db->error . ']');
}
}
} else {
die('There was an error running the query [' . $db->error . ']');
}
答案 0 :(得分:2)
这是你的问题Mate
echo "city:" . $city;die(); ///script stops.
.....
if(!$result2 = $db->query($sql2)){
DIE - 在此块中运行查询之前会过早地结束脚本。
从技术上讲,你可以逃脱这个
if(!$result2 = $db->query($sql2)){
但它很难读(双重否定)我会改变它的方式
if(false === ($result2 = $db->query($sql2))){
如你所知,你说的是if(!false == true )
,它将传递错误值并输出错误等。
AS Your Common Sense
提到你可能不在这个块中,但是不知道第一个查询的结果是什么,(在发布的代码块中运行它需要是假的)很难说。可能是第一个查询应该是假的?
if(!$result = $db->query($sql,MYSQLI_STORE_RESULT)){
.....
为了解释一下,上面的行需要返回false,然后使用!
不是真的,因为它下面的if块中的代码甚至可以运行。但是在这种情况下(如果它不是假的)将生成此输出
....
} else {
die('There was an error running the query [' . $db->error . ']');
}
更可能是错误的组合。