note 127012 deleted from mysqli-stmt.bind-param by girgias
| From: | girgias@php.net | Date: | Tue, 26 Apr 2022 11:45:29 +0000 |
| Subject: | note 127012 deleted from mysqli-stmt.bind-param by girgias | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-218318@lists.php.net to get a copy of this message | ||
Note Submitter: sbermail at ya dot ru
----
ÐонадобилаÑÑ ÑÑнкÑиÑ,
коÑоÑÐ°Ñ Ð²ÑÑавлÑеÑ
аÑÑоÑиаÑивнÑй маÑÑив в MySQL
ÑеÑез prepare иÑполÑзÑÑ ÐºÐ»ÑÑи
маÑÑива в каÑеÑÑве полей.
ФÑнкÑÐ¸Ñ ÑеÑÐ°ÐµÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ
паÑамеÑÑами mysqli_stmt_bind_param когда
неизвеÑÑÐ½Ñ ÑÐ¸Ð¿Ñ Ð²Ð½Ð¾ÑимÑÑ
даннÑÑ
и иÑ
колиÑеÑÑво.
РабоÑÐ°ÐµÑ Ñак:
<?php
$data=array('имÑ_колонки'=>'вноÑимое_знаÑение',
'имÑ_колонки2'=>'вноÑимое_знаÑение2');
insert('имÑ_ÑаблиÑÑ', $data);
?>
ФÑнкÑÐ¸Ñ Ð±ÐµÑÐµÑ ÑÐ¸Ð¿Ñ Ð¸Ð·
ÑаблиÑÑ MySQL, а не из
аÑÑоÑиаÑивного маÑÑива
<?php
//ÑÑнкÑÐ¸Ñ Ð²ÑÑавки
аÑÑоÑиаÑивного маÑÑива
ÑооÑвеÑÑвÑÑÑÑего колонкам
в базÑ; наÑпимеÑ
['паÑолÑ'=>'1234','логин'=>'user']
function insert($tab, $data){//$data маÑÑив полей Ñо
знаÑениÑми
['паÑолÑ'=>'1234','меÑка'=>'ÑеÑа'];
global $SQL;//полÑÑаем Ñоединение Ñ
базой MySQL
boolval(mysqli_query($SQL, "SHOW TABLES FROM {___base___} LIKE
'$tab'")->num_rows) or exit('ТаблиÑа '.$tab.'
не найдена');
$all_column=array_column(mysqli_fetch_all(mysqli_query($SQL, "SHOW COLUMNS FROM
$tab"), MYSQLI_ASSOC), 'Type', 'Field');
//менÑем Ñип Ð¿Ð¾Ð»Ñ Ð½Ð°Ð¿ÑÐ¸Ð¼ÐµÑ int(11)
на i Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑа к базе
array_walk($all_column,'change_type');
//полÑÑаем Ð¿Ð¾Ð»Ñ Ñ Ñипами
коÑоÑÑе иÑполÑзÑÑÑÑÑ Ð²
запÑоÑе
$use_types=array_intersect_key($all_column, $data);
//ÑоÑмиÑÑем types Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑа
mysqli_stmt_bind_param()
$str_types=implode($use_types);//напÑÐ¸Ð¼ÐµÑ siss
//ÑоÑмиÑÑем запÑоÑа к базе,
можно пеÑеделаÑÑ Ð½Ð° "INSERT INTO tbl_name
(question1,question2) VALUES(?,?) "
$prepare=implode('=?,',array_keys($use_types)).'=?';
//ÑпоÑÑдоÑиваем Ð¿Ð¾Ð»Ñ Ð¸Ð· даÑа
$data Ñ Ð¿Ð¾ÑÑдком в базе; Ñак же
оÑÑеиваем неÑÑÑеÑÑвÑÑÑие
полÑ
$data=array_values(array_replace($use_types, $data));
$ads = mysqli_prepare($SQL, "INSERT INTO СеÑвеÑа SET $prepare");
mysqli_stmt_bind_param($ads, $str_types, ...$data);
mysqli_stmt_execute($ads);
}
//ÑÑнкÑÐ¸Ñ Ð¿ÑеобÑазованиÑ
Ñипов полей Ð±Ð°Ð·Ñ Ð² ÑÐ¸Ð¿Ñ Ð´Ð»Ñ
запÑоÑа mysqli_stmt_bind_param
function change_type(&$t){
$t= match (true){
str_contains($t, 'int') or str_contains($t, 'bool') =>
'i',//ÑиÑла
str_contains($t, 'decimal') or str_contains($t, 'float') or str_contains($t,
'double') => 'd',//дÑоби
str_contains($t, 'blob') => 'b',//blob
default => 's',
};
}
?>