mysqli_error()预计只有1个参数,给定0

Mic*_*ael 5 php mysql mysqli

我试图让我的头围绕mysql.谁能告诉我为什么这个mysql查询不起作用?我收到以下错误:

警告:mysqli_error()预计在第11行的/home/freebet2/public_html/test.php中给出了1个参数0

test.php的

<?php
        require_once($_SERVER['DOCUMENT_ROOT'].'/includes/db.php');
        $conn = db_connect();
        $result = $conn->query("ALTER TABLE users ADD COLUMN refer_old INT(10) AFTER refer_id");

              if(!$result){
                 echo "Error with MySQL Query: ".mysqli_error();
             }
        ?>
Run Code Online (Sandbox Code Playgroud)

db.php中

 <?php

    function db_connect() {
       $result = new mysqli('localhost', 'user', 'password', 'db');
       if (!$result) {
         throw new Exception('Could not connect to database server');
       } else {
         return $result;
       }
    }

    ?>
Run Code Online (Sandbox Code Playgroud)

如果我将alter string更改为:$result = $conn->query("SELECT * FROM users refer_id");我出于某种原因没有错误.

Pas*_*TIN 10

您正在混合mysqli API的面向对象和过程样式:

您正在使用面向对象:

$result = new mysqli('localhost', 'user', 'password', 'db');
Run Code Online (Sandbox Code Playgroud)

然后,程序:

echo "Error with MySQL Query: ".mysqli_error();
Run Code Online (Sandbox Code Playgroud)


你应该使用OO或程序 - 但不能同时使用两者; 如果选择过程,则函数需要将链接标识符作为参数传递.

例如,mysqli_error应该使用面向对象的API调用:

$link = new mysqli(...);
echo $link->error;
Run Code Online (Sandbox Code Playgroud)

或者程序API:

$link = mysqli_connect(...);
echo mysqli_error($link);
Run Code Online (Sandbox Code Playgroud)


(当然,它不会改变您在SQL查询中出错的事实,但它会允许您获取错误消息,这应该有助于找到该错误的原因)


jer*_*oen 4

就sql错误而言,“用户”是否有权更改表?