我正在使用一个旧程序,它使用 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更新错误:您的sql语法有错误;检查与您的mariadb服务器版本对应的手册,以了解在第10行的“?,?,?,?,?,?,now())”附近使用的正确语法
有人告诉我的 mysqli_query
不运行准备好的语句。如果这是真的,对我来说什么是正确的方法?
1条答案
按热度按时间sqougxex1#
你的
query
方法只能获取一个参数。向其传递两个参数:通过使用
pdo
你需要更多的灵活性。然后你可以这样使用它: