【问题标题】:Cannot select from table, but I can insert and create?无法从表中选择,但我可以插入和创建?
【发布时间】:2016-05-04 08:23:00
【问题描述】:

我对 mysql 有一个非常奇怪的问题。我可以插入并创建表格。但是我不能选择任何东西,当我尝试时它不会显示任何错误,它只是回显我的行“错误:”

getDiff("validTable");

function getDiff($regNr) {
    global $servername, $username, $password, $dbname;
    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    //todo
    $sql = "SELECT * FROM $regNr ORDER BY id LIMIT 1";
    $result = $conn->query($sql);

    if ($result === TRUE) {
        echo "done";
    } else {
        $error = $result->error;
        echo "Error: " . $error;
    }
    $conn->close();
}

但是当我使用这个插入数据库时​​

$query = "CREATE TABLE IF NOT EXISTS $regNr ( `id` MEDIUMINT NOT NULL AUTO_INCREMENT, `mail` INT NOT NULL , `price` INT NOT NULL , `views` INT NOT NULL , `the_date` DATE NOT NULL , `time` VARCHAR(5) NOT NULL, PRIMARY KEY (id) )";
runQuery($query);

function runQuery($todo) {
   global $servername, $username, $password, $dbname;
   // Create connection
   $conn = new mysqli($servername, $username, $password, $dbname);
   // Check connection
   if ($conn->connect_error) {
       die("Connection failed: " . $conn->connect_error);
   }
   //todo
   $sql = $todo;

   if ($conn->query($sql) === TRUE) {
       echo "done";
   } else {
       echo "Error: " . $conn->error;
   }
   $conn->close();
}

它工作得很好而且花花公子。我做错了什么?!这快把我逼疯了!

【问题讨论】:

    标签: php mysql sql select mysqli


    【解决方案1】:

    它只显示“错误”,因为您的query 成功并返回一个不等于Truemysql object,因此它不会回显done

    见 (http://php.net/manual/en/mysqli.query.php)

    失败时返回 FALSE。对于成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询 mysqli_query() 将返回一个 mysqli_result 对象。为了 其他成功的查询 mysqli_query() 将返回 TRUE。

    使用以下代码更改您的代码以使其工作:

       if ($conn->query($sql) === FALSE) {
           echo "Error: " . $conn->error;
       } else {
           echo "done";
       }
    

    基本上将 if 转换为检查 FALSE 或不 FALSE。

    很可能您还想将结果存储在一个变量中,例如:

       if ($result = $conn->query($sql) === FALSE) {
    

    稍后使用$row = $result->fetch_array()$row = $result_fetch_assoc() 获取数据。

    【讨论】:

    • 谢谢!还要感谢 fetch_array()!工作时间太长,看不到明显的东西!
    【解决方案2】:

    mysqli_query

    失败时返回 FALSE。对于成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询 mysqli_query() 将返回一个 mysqli_result 对象。为了 其他成功的查询 mysqli_query() 将返回 TRUE。

    根据这个条件

    if ($conn->query($sql) === TRUE) {
    

    您从查询中得到mysqli_result,这不等于 TRUE,您总是会进入错误状态

    要从查询中获取数据,请使用 fetch_array

    $row = $result->fetch_array(MYSQLI_NUM);
    printf ("%s (%s)\n", $row[0]);
    

    要获取错误表单查询,我们使用 $conn->error 而不是 $result->error 它需要您的连接变量而不是结果变量

    阅读http://php.net/manual/en/mysqli.error.php

    【讨论】:

      猜你喜欢
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 2020-09-10
      • 1970-01-01
      相关资源
      最近更新 更多