【问题标题】:Warning: mysqli_error() expects exactly 1 parameter, 0 given [duplicate]警告:mysqli_error() 只需要 1 个参数,给定 0 [重复]
【发布时间】:2011-10-15 14:54:35
【问题描述】:

当尝试从我的数据库表“清单”返回一组简单的结果时,我收到以下错误;

“警告:mysqli_error() 只需要 1 个参数,给定 0”

我的list.php文件的代码如下;

<?php
require_once('/includes/connection.inc.php');
// create database connection
$conn = dbConnect('read');
$sql = 'SELECT * FROM checklist ORDER BY created DESC';
$result = $conn->query($sql) or die(mysqli_error());
?>

<?php while($row = $result->fetch_assoc()) { ?>

<?php echo $row['created']; ?>
<?php echo $row['title']; ?>

<?php } ?>

我的connection.inc.php文件内容(供参考)如下;

    <?php 
        function dbConnect($usertype, $connectionType = 'mysqli') { 
          $db = 'projectmanager'; 
          $host = 'localhost'; 
          if ($usertype  == 'read') { 
            $user = 'root'; 
            $pwd = ''; 
          } elseif ($usertype == 'write') { 
            $user = 'root'; 
            $pwd = ''; 
          } else { 
            exit('Unrecognized connection type'); 
          } 

                // Connection goes here...
                  if ($connectionType == 'mysqli') {
    return new mysqli($host, $user, $pwd, $db);
  } elseif ($mysqli->connect_error) {
    die('Connect Error: ' . $mysqli->connect_error);
  }

    }

    ?>

我一直在尝试遵循 PHP 解决方案一书中的一些示例:轻松找到动态 Web 设计 HERE ...但我已经遇到了 connection.inc.php 文件的问题(显示为 sn-p上面)我必须更正“或死('无法打开数据库');”并将其替换为您在上面看到的 mysqli_error 的基于 IF 的语句。所以我想知道这本书是否充满了一些基本的、根本性的错误——至少当呈现给像我这样的新手时会让我们感到困惑。

有帮助吗?

谢谢

【问题讨论】:

  • 我在发帖前先查看了该主题并尝试进行一些修改,但显然在 Spudley 在下面插话之前并没有完全“明白”!

标签: php mysql mysqli


【解决方案1】:

我认为您遇到的问题是因为您将面向对象和非 OO 调用组合到 MySQLi 库。

mysqli_error() 函数确实需要一个参数——它需要连接变量;在你的情况下,$conn

mysqli_error($conn)

但是,如果您以 OO 方式编写它,就像您对其余大多数数据库调用所做的那样,您应该这样编写它:

$conn->error

由于您的所有其余代码都是使用面向对象调用编写的,因此也可以将其用于此调用。

所以你的整行代码应该是这样的:

$result = $conn->query($sql) or die($conn->error);

您可以在 PHP 手册中查看更多示例:http://php.net/manual/en/mysqli.error.php

希望对您有所帮助。

关于您正在使用的书的问题:我无法直接评论这本书本身,因为我没有读过它。但请注意,PHP 有两个 MySQL 库;较旧的 mysql 库和较新的 mysqli 库。旧库也有一个mysql_error() 函数,它与新库的不同之处在于它不需要连接变量。如果您使用的书中有错误,这可能是造成混乱的根源。

【讨论】:

  • 嗨,斯普德利,成功了!我根本不知道这是问题所在,我认为这本书让我有些困惑(现在),但感谢您澄清了这一点。赞赏。
  • 关于您的 “我认为您遇到的问题是因为您将面向对象和非 OO 调用结合到 MySQLi 库中。” - 那应该'不是问题。不推荐,好吧……但他们确实一起工作。在这里,您自己看看secure.php.net/manual/en/mysqli.quickstart.dual-interface.php 手册在“混合样式”下的说明: 可以随时在样式之间切换。出于代码清晰和编码风格的原因,不建议混合使用这两种风格。。顺便提一句;我只是从谷歌搜索中偶然发现了这个关于我正在寻找的东西的问题。
  • @FunkFortyNiner 是的,你说的很对。完全可以混合两种风格。这不好,但可以做到。这个答案的重点是这样做会混淆 OP,因此是他们问题的原因。这本身并没有错,但这就是这个人感到困惑的原因。我就是这么回答的,这个回答帮助他们理解了。
猜你喜欢
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
  • 2017-10-27
  • 2017-10-23
  • 2019-03-24
  • 1970-01-01
  • 2016-08-17
  • 2012-10-19
相关资源
最近更新 更多