php - 如何使用绑定变量通过 php 查询数据库?
问题描述
我正在制作一个歌曲数据库系统,并且我正在尝试实现一种方法,让用户根据要搜索的类别(歌曲名称、艺术家姓名、专辑名称、流派等)和给定的搜索词来搜索歌曲。为了适应用户输入并防止 SQL 注入,我使用了一个使用绑定变量制作的准备好的语句,但是我目前所做的有问题:
search("genre", "electropop", $db);
function search($column, $term, $db) {
try {
$sql = "SELECT * FROM Songs WHERE :column=:term;";
$stmt = $db->prepare($sql);
$params = array("column" => $column,
"term" => $term);
$stmt->execute($params);
$arr = $stmt->fetchALL(PDO::FETCH_ASSOC);
print (json_encode($arr));
}
catch(PDOException $ex) {
catch_error("The search failed.", $ex);
}
}
每当我对此进行测试时,我都会返回一个空数组:[ ]
我在 phpmyadmin 中测试了我的查询(“SELECT * FROM Songs WHEREgenre='electropop'”),它签出了(给我回了条目)。SQL 中 WHERE 子句的正确语法是该术语需要用引号括起来(https://www.w3schools.com/sql/sql_where.asp)所以我尝试在该术语周围转义引号:
...
$sql = "SELECT * FROM Songs WHERE :column=\':term;\'";
...
但是它甚至没有看到 :term 作为以后绑定变量的标记。
不知道如何解决这个问题。我认为空数组是由于有效搜索但没有结果,但也许我没有正确使用准备好的语句。任何帮助将非常感激!谢谢!
解决方案
你错过了:
之前的term
参数。不需要绑定列名。只需使用$column
var 而不是:column
.
search("genre", "electropop", $db);
function search($column, $term, $db) {
try {
$sql = "SELECT * FROM Songs WHERE $column=:term;";
$stmt = $db->prepare($sql);
$params = array(":term" => $term);
$stmt->execute($params);
$arr = $stmt->fetchALL(PDO::FETCH_ASSOC);
print (json_encode($arr));
}
catch(PDOException $ex) {
catch_error("The search failed.", $ex);
}
}
推荐阅读
- ansible - 如果键在ansible play中的dict中不可用,如何设置默认值
- c# - 如何在itext7中居中对齐并设置粗体文本
- python - 比较和量化一组非线性数据中的相似性
- content-management-system - 在 Hybris 中,如何在没有自定义组件的情况下呈现新的 CMS 页面?
- php - Symfony 引导主题
- c# - List 中的 Foreach 仅在迭代后的不同条件下返回相同的记录
- python - python)如何将python 1D列表划分为恒定数量的随机大小python列表(2D)
- python - 试图在 python 3.9 中识别 Django 3.2 应用程序
- node.js - Github 操作 - 错误:进程已完成,退出代码
- javascript - 我应该如何在其他输入字段中获取 base64 格式的图像?