いいえ...これは、 mysqli_stmt_bind_param()
動作します...これは$array
を変更することで正常に動作します 他の列のデータの削除/追加に。
$mysqli = new mysqli('localhost', 'root', 'password', 'test');
$array = array("name"=>"pineapple", "color"=>"purple");
$table_name = "fruit";
insert_data($mysqli, $array, $table_name);
function insert_data($mysqli, $array, $table_name)
{
$placeholders = array_fill(0, count($array), '?');
$keys = array();
$values = array();
foreach($array as $k => $v) {
$keys[] = $k;
$values[] = !empty($v) ? $v : null;
}
$query = "insert into $table_name ".
'('.implode(', ', $keys).') values '.
'('.implode(', ', $placeholders).'); ';
// insert into fruit (name, color) values (?, ?);
$stmt = $mysqli->prepare($query);
// create a by reference array...
$params = array();
foreach ($array as &$value) {
$params[] = &$value;
}
$types = array(str_repeat('s', count($params)));
$values = array_merge($types, $params);
/*
$values = Array
(
[0] => ss
[1] => pineapple
[2] => purple
)
*/
call_user_func_array(array($stmt, 'bind_param'), $values);
$success = $stmt->execute();
if ($success) { print "it worked..."; }
else { print "it did not work..."; }
}
私はこれらのSO投稿からいくつかの助けを得ました:
- https://stackoverflow.com/a / 15933696/623952
- https://stackoverflow.com/a/6179049/623952
だから...$stmt->bind_param()
で 最初のパラメーターは、渡されたパラメーターごとに1つのcharを持つ文字列です。そして、そのcharはパラメーターのデータ型を表します。上記の例では、2つのパラメーターは両方とも文字列であるため、ss
になります。 。上記の例でも、常に文字列が想定されています。
このグラフはbind_param()
で見つかりました ドキュメント:
タイプ
対応するバインド変数のタイプを指定する1つ以上の文字を含む文字列:
Type specification chars
Character Description
i corresponding variable has type integer
d corresponding variable has type double
s corresponding variable has type string
b corresponding variable is a blob and will be sent in packets