【问题标题】:mysqli_query parameters [duplicate]mysqli_query参数[重复]
【发布时间】:2013-02-25 18:51:42
【问题描述】:

我正在尝试将我的一个项目从 mysql 转换为 mysqli,但它似乎给了我一个错误

Warning: mysqli_query() expects at least 2 parameters, 1

这是我的数据库连接

$mysqli = new mysqli();
$mysqli->connect('localhost', 'root', '', 'myscript');

这是查询

$sql = mysqli_query("SELECT * FROM settings WHERE id='1'") or die (mysqli_error());
$results = mysqli_fetch_array($sql);

如果有人能告诉我如何解决这个错误,我将不胜感激。提前致谢。

【问题讨论】:

  • mysqli_query() 的参数在手册中有解释:php.net/mysqli_query(注意:程序风格!)
  • 也许手册可以提供帮助:mysqli_query。对象结构的接口更容易使用,只有过程调用需要资源/链接参数。
  • 您使用 OO 样式建立了连接。为什么不继续这样呢? $sql = $mysqli->query(...);

标签: php mysql mysqli


【解决方案1】:

您可以尝试使用面向对象的 PHP 方式执行查询,而不是混合和匹配面向对象的 PHP 和常规 PHP:

$mysqli = new mysqli();
$mysqli->connect('localhost', 'root', '', 'myscript');
if($result = $mysqli->query("SELECT * FROM settings WHERE id='1'")){

    //DO STUFF

    $result->close();
}else{
     printf("Error: %s\n", $mysqli->error);
}

【讨论】:

    【解决方案2】:

    请不要将您的项目从 mysql 转换为 mysqli。
    将其转换为 PDO。
    Mysqli 仅适用于初学者手册中的愚蠢示例 - 随着您的进步,它会让您的生活更加艰难。

    所以,不要使用 mysqli,而是使用 PDO。
    几乎一样:

    $opt = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
    $pdo = new PDO('mysql:dbname=myscript;host=localhost','root','', $opt);
    
    $stm = $pdo->prepare("SELECT * FROM settings WHERE id=?");
    $stm->execute(array(1));
    $data = $stm->fetch();
    

    注意参数化查询支持 - 在驱动程序之间进行这种移动的主要原因 - 已在此代码中使用。
    即使在这样的小例子中,PDO 也更好。好多了对于更复杂的,mysqli 将变得完全无法使用,而 PDO 将是相同的 - 非常丑陋但至少可行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多