我正在尝试做一个非常简单的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
视为对象,但它是一个数组。不是吗?
所以我以为我错过了一些东西,比如处理该查询的文件:
<?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);
}
?>
<?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"); ?>
&#34 ;; echo&#34;
Tornar al calendari
&#34 ;; } } else { //这可能是一个GET请求 redirect_to的(&#34; nou_usuari.php&#34); } ?&GT;<?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()是一个我没有放置的内置函数,但它不是错误。
答案 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_result
和table
移至if if语句中。
在这里查看mysqli_free_result
答案 2 :(得分:0)
看来,您的连接或数据库存在问题。至少,mysqli_query
返回一个布尔值,该布尔值应该为假(否则它不会是布尔值..)。
mysqli_free_result
需要有效的结果,但由于某些原因您的查询失败,您会收到警告。
所以你必须
mysqli_free_result
方法移到条件的真实部分内,如果查询失败,则不会调用它。mysqli_error($conn)
了解错误原因