我正在使用一个旧程序,该程序在类中使用calss A
{
int propToKeep;
}
class B extends A
{
@Override
int propToKeep;
int propToDrop;
}
(不建议使用)进行数据库连接和执行查询。许多页面正在使用此类,因此我认为我需要对其进行一些小的更改。因此,我将程序下载到了本地计算机上,并尝试将其升级为List<A>
个功能。
这是课程:
B
我已经将它们更改为mysql_* functions
。
在此之前,我正在使用此代码将记录插入或更新或删除到数据库。插入示例:
mysqli_*
现在,我尝试将msqli函数与已准备好的语句一起使用。示例:
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;
}
}
问题: 使用prepared语句运行insert查询会给我一个错误。
注意:MySQL UPDATE错误:您的SQL语法有错误。检查与您的MariaDB服务器版本相对应的手册,以找到在第10行的'?,?,?,?,?,?,?,NOW())'附近使用的正确语法
有人告诉我mysqli
没有运行准备好的语句。如果是这样,那么对我来说,正确的做法是什么?
答案 0 :(得分:2)
您的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']
]);