note 127012 added to mysqli-stmt.bind-param
| From: | sbermail at ya dot ru | Date: | Tue, 26 Apr 2022 11:10:28 +0000 |
| Subject: | note 127012 added to mysqli-stmt.bind-param | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-218317@lists.php.net to get a copy of this message | ||
ÐонадобилаÑÑ ÑÑнкÑиÑ,
коÑоÑÐ°Ñ Ð²ÑÑавлÑеÑ
аÑÑоÑиаÑивнÑй маÑÑив в 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',
};
}
?>
----
Server IP: 45.112.84.4
Probable Submitter: 45.91.159.162 (proxied: 185.86.124.64)
----
Manual Page -- https://php.net/manual/en/mysqli-stmt.bind-param.php
Edit -- https://main.php.net/note/edit/127012
Del: integrated -- https://main.php.net/note/delete/127012/integrated
Del: useless -- https://main.php.net/note/delete/127012/useless
Del: bad code -- https://main.php.net/note/delete/127012/bad+code
Del: spam -- https://main.php.net/note/delete/127012/spam
Del: non-english -- https://main.php.net/note/delete/127012/non-english
Del: in docs -- https://main.php.net/note/delete/127012/in+docs
Del: other reasons-- https://main.php.net/note/delete/127012
Reject -- https://main.php.net/note/reject/127012
Search -- https://main.php.net/manage/user-notes.php