如何使用绑定变量查询 php 的数据库?
How do I query a database with php using bind variables?
我正在制作一个歌曲数据库系统,我正在尝试实现一种方法,让用户可以根据要搜索的类别(歌曲名称、艺术家姓名、专辑名称、流派等)和给定的类别来搜索歌曲搜索词。为了适应用户输入并防止 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 WHERE genre='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);
}
}
我正在制作一个歌曲数据库系统,我正在尝试实现一种方法,让用户可以根据要搜索的类别(歌曲名称、艺术家姓名、专辑名称、流派等)和给定的类别来搜索歌曲搜索词。为了适应用户输入并防止 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 WHERE genre='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);
}
}