MySQLi没有显示任何错误

时间:2016-10-13 14:32:36

标签: php mysql mysqli

我一直试图解决这个问题已经好几个小时了,只是无法弄清楚我在这里做错了什么。循环不会循环(没有什么是回声' 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 . ']');
}

1 个答案:

答案 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 . ']');
}

更可能是错误的组合。