无法通过 PHP 查询 MySQL 数据库

问题描述:

在我的 PHP 代码中,我很容易将记录写入我的数据库,但由于某种原因我无法读取任何内容.我的 PHP 代码是:

In my PHP code, i'm easily writing records to my database but for some reason i can't read anythign out. My PHP code is:

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

$sql = "SELECT * FROM companies";

if ($conn->query($sql) === TRUE)
{
    echo "query success";

    while($row = $result->fetch_assoc())
    {
        echo "ID: " . $row["ID"]. " - Name: " . $row["name"]. "<br>";
    }
}
else
{
    echo "query failure";
    echo "Error: " . $sql . "<br>" . $conn->error;
}


$sql = "INSERT INTO companies (name) 
        VALUES ('mycompany')";

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

    echo "insert success";
}
else
{
    echo "insert failure";
    echo "Error: " . $sql . "<br>" . $conn->error;
}

我运行时从浏览器得到的输出是:查询失败错误:SELECT * FROM公司插入成功

The output I get from the browser when i run it is: query failureError: SELECT * FROM companies insert success

我在 $sql 字符串中尝试了撇号、插入符号和引号的变体.我试过在 HeidiSQL 中运行这个查询,它工作正常.任何想法我哪里出错了?我可以尝试缩小问题根源的更基本内容的任何建议吗?

I've tried variations of apostrophes, carets, quotes in that $sql string. I've tried running this query in HeidiSQL and it works fine. Any ideas where I'm going wrong? Any suggestions of more basic stuff I can try to narrow down the source of the problem?

谢谢!

使用 mysqli->query()SELECT 语句返回一个 的实例mysqli_result.它与 true (=== true) 不同,但也不代表错误.

Using mysqli->query() with a SELECT statement returns an instance of mysqli_result. It is not identical to true (=== true), but nor does it represent an error.

此外,$result 是未定义的.

改用这个:

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

$sql = "SELECT * FROM companies";

if (($result = $conn->query($sql)) !== FALSE)
{
    echo "query success";

    while($row = $result->fetch_assoc())
    {
        echo "ID: " . $row["ID"]. " - Name: " . $row["name"]. "<br>";
    }
}
else
{
    echo "query failure";
    echo "Error: " . $sql . "<br>" . $conn->error;
}
...

这只是将您的 === TRUE 检查更改为 !== FALSE.MySQLi::query() 在失败时返回布尔值 FALSE,在没有结果集的成功查询时返回布尔值 TRUE,或者在结果集成功时返回 mysqli_result.这也将 query() 的结果赋值给 $result.

This simply changes your === TRUE check to !== FALSE. MySQLi::query() returns boolean FALSE on failure, boolean TRUE on a successful query without result sets or a mysqli_result upon success with a result set. This also assigns the result of query() into $result.