[英]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.