簡體   English   中英

mysqli_query在類中具有准備好的語句

[英]mysqli_query with prepared statement in a class

我正在使用一個舊程序,該程序在類中使用mysql_* functions (不建議使用)進行數據庫連接和執行查詢。 許多頁面正在使用此類,因此我認為我需要對其進行一些小的更改。 因此,我將程序下載到了本地計算機上,並嘗試將其升級為mysqli_*函數。

這是課程:

final class db{
static $db;

static function config($conf=false){
    self::$db = mysqli_connect($conf['host'], $conf['username'], $conf['password']);
    if (!self::$db) {
        die("Database connection failed: " . mysqli_connect_error());
    }

    mysqli_select_db(self::$db, $conf['database']);

}

static function query($sql){
    $result = mysqli_query(self::$db, $sql);
    if(!$result) trigger_error("MySQL UPDATE error: ".mysqli_error(self::$db).'<pre>'.$sql.'</pre><br>');
}

static function select($sql, $args=false){

    if($args['pager']){
        $limit = self::load_pager($args['pager']);
        $sql .= 'LIMIT '.$limit;
    }

    $result = mysqli_query(self::$db, $sql);
    if(!$result) trigger_error("MySQL SELECT error: ".mysqli_error()." using ".$sql);

    if(@$args['explain']==true) self::explain($sql);

    while ($r = mysqli_fetch_array($result,MYSQLI_ASSOC)){
            $row[] = $r;
    }


    mysqli_free_result($result);

    @array_walk_recursive($row, 'de_clean_post_recursive');
    return @$row;
}

 }

我已經將它們更改為mysqli

在此之前,我使用此代碼將記錄插入或更新或刪除到數據庫。 插入示例:

$sql = "INSERT INTO transactions_in(
                    transact_in_date,
                    transact_in_total_sacks,
                    transact_in_from_location,
                    transact_in_to_location,
                    transact_in_note,
                    transact_in_by_user,
                    transact_in_date_added
                    )
                    VALUES(
                    '{$transact_date}',
                    '{$post['transact_total_sacks']}',
                    '{$post['transact_from_location']}',
                    '{$my_location}',
                    '{$post['transact_note']}',
                    '{$_SESSION['user_name']}',
                     NOW()
                    )";
    db::query($sql);
}

現在,我嘗試將msqli函數與已准備好的語句一起使用。 例:

 $sql = "INSERT INTO transactions_in(
                    transact_in_date,
                    transact_in_total_sacks,
                    transact_in_from_location,
                    transact_in_to_location,
                    transact_in_note,
                    transact_in_by_user,
                    transact_in_date_added
                    )
                    VALUES (?,?,?,?,?,?,NOW())";
    #echo $sql;
    #exit;
    db::query($sql,[ $transact_date, $post['transact_total_sacks'], $post['transact_from_location'], $my_location, $post['transact_note'], $_SESSION['user_name'] ]);

問題:使用prepared語句運行insert查詢會給我一個錯誤。

注意:MySQL UPDATE錯誤:SQL語法錯誤; 檢查與您的MariaDB服務器版本相對應的手冊以獲取在第10行的'?,?,?,?,?,?,NOW())'附近使用的正確語法

有人告訴我mysqli_query不運行准備好的語句。 如果是這樣,那么對我來說,正確的做法是什么?

您的query方法只有一個參數。 您將兩個參數傳遞給它:

db::query($sql,[$transact_date, $post['transact_total_sacks'], $post['transact_from_location'], $my_location, $post['transact_note'], $_SESSION['user_name']]);

通過使用pdo您將獲得更大的靈活性。

class db {
    static $pdo;
    public function __construct()
    {
        self::$pdo = new PDO('CONNECTION STRING');
    }

    public static function query($query, $params){
        $stmt = self::$pdo->prepare($query);
        $stmt->execute($prarams);
    }
}

那么您可以像這樣使用它:

 $sql = "INSERT INTO transactions_in(
                    transact_in_date,
                    transact_in_total_sacks,
                    transact_in_from_location,
                    transact_in_to_location,
                    transact_in_note,
                    transact_in_by_user,
                    transact_in_date_added
                    )
                    VALUES (?,?,?,?,?,?,NOW())";
    #echo $sql;
    #exit;

db::query($sql, [
            $transact_date,
            $post['transact_total_sacks'],
            $post['transact_from_location'],
            $my_location,
            $post['transact_note'],
            $_SESSION['user_name']
        ]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM