gpt4 book ai didi

php - 在php中向数组值添加引号

转载 作者:行者123 更新时间:2023-11-29 12:21:22 28 4
gpt4 key购买 nike

以下脚本用于从多维数组中内爆值并将其插入到 mysql 表中。该表包含varchar和decimal两种字段数据类型。由于 varchar 类型需要引号并避免有选择地放置引号,因此我想将所有值都放在引号中。如何实现?

$values = array();
foreach ($data as $rowValues) {
foreach ($rowValues as $key => $rowValue) {
}

$values[] = "(" . implode(', ', $rowValues) . ",'".$date."')";
}

$query = "INSERT INTO mem (memno,loan,subsc,intst, date)
VALUES " . implode (', ', $values);
$result=mysql_query($query) or die();

我想要这样的sql

INSERT INTO mem (memno,loan,subsc,intst, date)
values('value1', 'value2', 'valu3','value4','value5')

最佳答案

不要使用用户输入来构建 SQL 字符串 - 这就是 SQL 注入(inject)攻击的方式。

XKCD - Exploits of a mom

而是使用 a prepared statement :

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');

$stmt = $mysqli->prepare("
INSERT INTO mem( memno, loan, subsc, intst, date )
VALUES (?, ?, ?, ?, ?);
");
$stmt->bind_param('sssss', $memno, $loan, $subsc, intst, $date);

编辑回应评论:

使用 PDO 动态绑定(bind)列数组非常容易。

$db =new PDO("mysql:host=localhost;dbname=database;","root","");

/**
* @param PDO $db
* @param string $table - the table to insert into
* @param array $columns - which columns do we want to insert into
* @param array $data - a key/value array of the data we want to insert
* @return bool
*/
function insert_into($db, $table, array $columns, array $data) {
$rows = implode(', ', $fields);
$placeholders = array_map ( function($key){ return ":$key" }, $fields);
$placeholders = implode(', ', $fields);

$sql = "
INSERT INTO $table ($fields)
VALUES ($placeholders);
";

$stmt = $db->prepare($sql);

foreach( $fields as $field) {
$stmt->bindParam(":$field", $data[$field]);
}

return $sth->execute();
}

$inserted = insertInto(
$db
'mem',
array("memno", "loan", "subsc", "intst", "date"),
$data
);

请注意,要插入的列是单独定义的。如果我使用过:

array_keys($data);

这将导致 mass assigment vulnerability如果 $data 来自用户输入且未列入白名单。

您可以使用 mysqli 完成同样的事情,但它有点棘手。

关于php - 在php中向数组值添加引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28957103/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com