Я работаю со старой программой, которая использует mysql_* functions
(устарело) в классе для соединения с базой данных и выполнения запросов. Многие страницы используют этот класс, поэтому я думаю, что мне нужно внести в него небольшие изменения. Поэтому я загрузил программу на свой локальный компьютер и попытался обновить ее до mysqli_*
функций.
Это класс:
<code>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.'
');
}
статическая функция select ($ sql, $ args = false) {
если ($ арг [ 'пейджера']) {
$ limit = self :: load_pager ($ args ['pager']);
$ sql. = 'LIMIT'. $ limit;
}
$ result = mysqli_query (self :: $ db, $ sql);
if (! $ result) trigger_error ("Ошибка MySQL SELECT:" .mysqli_error (). "using". $ sql);
if (@ $ args ['объяснение'] == правда) self :: объяснение ($ sql);
while ($ r = mysqli_fetch_array ($ result, MYSQLI_ASSOC)) {
$ row [] = $ r;
}
mysqli_free_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'] ]);
Вопросы:
Выполнение запроса вставки с подготовленным оператором выдает ошибку.
Примечание. Ошибка обновления MySQL: в синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы найти правильный синтаксис для использования рядом с '?,?,?,?,?,?, NOW ())' в строке 10
Кто-то сказал мне, что mysqli_query
не запускает подготовленные операторы. Если это правда, как правильно сделать это в моем случае?