php - 如何使用 PHP 将数组插入 SQL Server 数据库
问题描述
我想使用 PHP 在 SQL Server 数据库中插入一个数组作为值。这是我的代码:
$data = array(
'score' => filter_input(INPUT_POST, 'score', FILTER_VALIDATE_INT),
'max_score' => filter_input(INPUT_POST, 'maxScore',
FILTER_VALIDATE_INT),
'opened' => filter_input(INPUT_POST, 'opened', FILTER_VALIDATE_INT),
'finished' => filter_input(INPUT_POST, 'finished',
FILTER_VALIDATE_INT),
'time' => filter_input(INPUT_POST, 'time', FILTER_VALIDATE_INT)
);
$data['user_id'] = $_SESSION['ex_uid'];
$data['content_id'] = $content_id;
$sql = "INSERT INTO results (content_id, user_id, score, max_score, opened, finished, time)
VALUES ($data)";
$params = array(1, "some data");
$stmt = sqlsrv_query( $connmssql, $sql, $params);
解决方案
始终尝试使用参数化语句。函数sqlsrv_query()
既做语句准备又做语句执行,可用于执行参数化查询。在您的情况下,您需要为数组?
中的每个项目放置一个占位符:$params
<?php
...
// Parameters
$score = filter_input(INPUT_POST, 'score', FILTER_VALIDATE_INT);
$max_score = filter_input(INPUT_POST, 'maxScore', FILTER_VALIDATE_INT);
$opened = filter_input(INPUT_POST, 'opened', FILTER_VALIDATE_INT);
$finished = filter_input(INPUT_POST, 'finished', FILTER_VALIDATE_INT);
$time = filter_input(INPUT_POST, 'time', FILTER_VALIDATE_INT);
$user_id = $_SESSION['ex_uid'];
// Prepare and execute statement
$params = array($score, $max_score, $opened, $finished, $time, $user_id, $content_id);
$sql = "
INSERT INTO results (score, max_score, opened, finished, time)
VALUES (?, ?, ?, ?, ?, ?, ?)
";
$stmt = sqlsrv_query($connmssql, $sql, $params);
if ($stmt === false) {
echo "Row insertion failed.\n";
die(print_r(sqlsrv_errors(), true));
} else {
echo "Row successfully inserted.\n";
}
...
?>
推荐阅读
- google-maps - Google表格中GOOGLEMAPS自定义应用脚本函数的数组输入
- javascript - 有多个触发器时如何更新 gsap 中目标的坐标?
- firebase - 是否可以在创建 firebase 用户之前发送验证电子邮件并验证电子邮件?
- laravel - Laravel 7 验证规则填充或存在不适用于动态生成的选择
- mysql - JSON 列中的最高值
- matlab - Matlab中非方阵对角线的镜子
- vue.js - Nuxt 运行时错误 - 拒绝执行脚本,因为它的 MIME 类型 ('text/html') 不可执行,并且启用了严格的 MIME 类型检查
- vue.js - Nuxt - cookie 不在请求中发送
- flutter - 在此消费者小部件上方找不到正确的提供者
- python - 如何使用 python 获得与使用 OpenSSL 相同的解密结果?