对mysql执行查询的问题 - 给定布尔值

时间:2015-10-19 08:59:26

标签: php mysql select

我正在尝试做一个非常简单的CRUD操作,实际上我刚刚开始,所以我读"阅读",这是最简单的步骤,而且已经出错了!

PHP代码

 <?php 
    global $conn;

    $query = "SELECT * FROM usuaris";
    if ($grup_usuaris = mysqli_query($conn, $query)) {
        echo "<table>";
        echo "<tr><th>Usuaris</th></tr>";
        while($row = mysqli_fetch_array($grup_usuaris)) {
            echo "<tr><td>" . $row['usuari_nom'] . "</td></tr>";
        }
    } else {
        echo "query failed";
    } 
    mysqli_free_result($grup_usuaris);

    echo "</table>";            
?>

所以我的表名为usuaris,我只是想显示usuari_nom列(我的表中实际上只有一列来自id!),但它说< / p>

  

mysqli_free_result()期望参数1为mysqli_result,boolean   给定

在这一行:mysqli_free_result($grup_usuaris);

我理解我将$grup_usuaris视为对象,但它是一个数组。不是吗?

更新

所以我以为我错过了一些东西,比如处理该查询的文件:

connection_db.php

<?php
// information about our database connection and table we want to work on
$servername = "localhost";
$username = "eve";
$password = "pass123";

// Create connection
$conn = mysqli_connect($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
?>

然后我想在calendari.php中显示结果:

<?php require_once("includes/connection_db.php"); ?>

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Calendari Papa</title>
    <link href="css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
    <link href="css/bootstrap-theme.min.css" rel="stylesheet" type="text/css"/>
    <link href="css/estils.css" rel="stylesheet" type="text/css"/>
  </head>
  <body>
<div id="main">
        <?php 
    global $conn;

    $query = "SELECT * FROM usuaris";

    if($grup_usuaris = mysqli_query($conn, $query)) {
         echo "<table>";
         echo "<tr><th>Usuaris</th></tr>";
             while($row = mysqli_fetch_array($grup_usuaris)) {
                 echo "<tr><td>" . $row['usuari_nom'] . "</td></tr>";
             }
         echo "</table>";
         mysqli_free_result($grup_usuaris);
    } else {
        echo "query failed";
    }           
        var_dump($grup_usuaris);
        ?>
    </div>
    <script src="js/jquery-1.11.3.min.js" type="text/javascript"></script>
    <script src="js/jquery.ddslick.js" type="text/javascript"></script>
    <script src="js/bootstrap.min.js" type="text/javascript"></script>
    <script src="js/scripts.js" type="text/javascript"></script>
  </body>
</html>

<?php require_once("includes/connection_db_close.php"); ?>

带有表单的页面,用于创建名为crea_usuari.php的usuari:

Tornar a intentar-ho

&#34 ;;             echo&#34;

Tornar al calendari

&#34 ;;           }     } else {         //这可能是一个GET请求         redirect_to的(&#34; nou_usuari.php&#34);     }     ?&GT;     

然后处理名为nou_usuari.php

的表单的文件
<?php require_once("includes/connection_db.php"); ?>

<div>
  <div id="page"><!--We want the content of the pages on the right-->
    <h2>Crea un usuari nou</h2>
      <form action="crea_usuari.php" method="POST">
        <p>Nom del nou usuari:
          <input type="text" name="usuari_nom" value="" />
        </p>  
        <input type="submit" name="submit" value="Crea usuari" />
    </form>
    <br />
    <a href="calendari.php">Cancel</a>
  </div>
</div>

<?php require_once("includes/connection_db_close.php"); ?>

提及:redirect_to()是一个我没有放置的内置函数,但它不是错误。

3 个答案:

答案 0 :(得分:1)

编辑答案:

似乎您没有指定要查询的数据库。在connection_db.php中,您只连接到数据库服务器。您没有指定要查询的数据库(架构)。所以将它添加到你的connection_db.php中,它将如下所示:

<?php
    // information about our database connection and table we want to work on
    $servername = "localhost";
    $username = "eve";
    $password = "pass123";
    $database = "your database schema";

    // Create connection
    $conn = mysqli_connect($servername, $username, $password, $database);

    // Check connection
    if (mysqli_connect_errno())
    {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
?>

发现问题的步骤:

当我看一下你的代码并做一个简单的谷歌搜索。我遇到了这个解释:w3schools mysqli free result

您的代码应如下所示:

<?php 
    global $conn;

    $query = "SELECT * FROM usuaris";

    if($grup_usuaris = mysqli_query($conn, $query)) {
         echo "<table>";
         echo "<tr><th>Usuaris</th></tr>";
             while($row = mysqli_fetch_array($grup_usuaris)) {
                 echo "<tr><td>" . $row['usuari_nom'] . "</td></tr>";
             }
         echo "</table>";
         mysqli_free_result($grup_usuaris);
    } else {
        echo "query failed";
    }          
?>

(我还将结束表标记放在if语句中,因为只有在If语句返回true时才输出开始标记。)

据我所知,mysqli_free_result()释放了与查询结果相关的内存。由于查询结果可能仅在返回true时设置,因此您应该只在if语句中释放它。

编辑:

删除“global $ conn;”没有解决问题。我从头开始研究。由于w3schools使用不同的函数来显示连接错误,请在connection_db.php中尝试:

if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

从$ grup_usuaris = mysqli_query($ conn,$ query)开始:

For successful SELECT, SHOW, DESCRIBE, or EXPLAIN queries it will return a mysqli_result object. For other successful queries it will return TRUE. FALSE on failure.

所以我猜你的查询失败了?

尝试把它放在你的其他地方:echo(“错误描述:”。mysqli_error($ conn));

所以你的代码看起来像是:

if($grup_usuaris = mysqli_query($conn, $query)) {
    ....
} else {
    echo("Error description: " . mysqli_error($conn));
}

这可能有助于调试。

另外:mysqli_fetch_array()输出一个带索引的数组。所以$ row [0]将对应表中的colum 1。用户mysqli_fetch_assoc()使用colum名称作为索引,同时输出$ row。

希望它有所帮助。

答案 1 :(得分:0)

首先,你的代码应如下所示,然后检查你是否应该得到$ conn。

<?php 
global $conn;

$query = "SELECT * FROM usuaris";
if ($grup_usuaris = mysqli_query($conn, $query)) {
    echo "<table>";
    echo "<tr><th>Usuaris</th></tr>";
    while ($row = mysqli_fetch_array($grup_usuaris)) {
        echo "<tr><td>" . $row['usuari_nom'] . "</td></tr>";
    }
    mysqli_free_result($grup_usuaris);
    echo "</table>";
} else {
    echo "query failed";
}
?>

我已将mysqli_free_resulttable移至if if语句中。

在这里查看mysqli_free_result

答案 2 :(得分:0)

看来,您的连接或数据库存在问题。至少,mysqli_query返回一个布尔值,该布尔值应该为假(否则它不会是布尔值..)。

mysqli_free_result需要有效的结果,但由于某些原因您的查询失败,您会收到警告。

所以你必须

  • mysqli_free_result方法移到条件的真实部分内,如果查询失败,则不会调用它。
  • 修复查询(检查表是否存在,$ conn是否为有效连接等。)
  • 使用mysqli_error($conn)了解错误原因