【发布时间】:2016-01-12 20:39:32
【问题描述】:
我正在尝试在 PHP 中创建一个 OOP 风格的 CRUD 类,并使用 PDO 准备好的语句来防止注入。我的连接正常,我可以从类中执行常规 SQL 查询,但是当我尝试合并 PDO 的准备函数时,我收到一个错误,我有一个 MySQL 语法错误或 PDO 准备未定义。
错误在$p_query = $db->prepare($sql) 行被抛出。谁能发现我做错了什么?
<?php
require_once 'dbconfig.php';
class Crud {
protected $db;
private static function fetchQuery($sql, $values) {
echo $sql;
var_dump($values);
$db = Db_conn::pdoBuilder();
$p_query = $db->prepare($sql);
$p_query->execute($values);
$results = $p_query->fetch(PDO::FETCH_OBJ);
return $results;
}
public static function show($tbl, $id) {
$sql = '"SELECT * FROM (:tbl) WHERE id = (:id)"';
$values = [':tbl' => $tbl, ':id' => $id];
$results = self::fetchQuery($sql, $values);
return $results;
}
public static function listAll($tbl) {
$sql = '"SELECT * FROM (:tbl)"';
$values = [':tbl' => $tbl];
$results = self::fetchQuery($sql, $values);
return $results;
}
}
【问题讨论】:
-
向我们展示
$sql和$values的输出 -
您是否尝试从查询中删除双引号?从表名和列过滤器中删除括号怎么样?
-
@MarcoAurélioDeleu sql: "SELECT * FROM (:tbl)" values: array(1) { [":tbl"]=> string(6) "client" }
-
表名不能参数化。准备好的语句基本上是部分查询,其中缺少的只是 where 子句或
VALUES(在插入的情况下)中的数据\