我正在按照这里的一群人的建议转移到PDO:)
以下是目前正常运作的代码
<?php
$table = "tbl_staff";
$all = $database->find_by_sql('SELECT * FROM tbl_staff'); echo '<pre>';
echo "<b> Find by SQL</b></br>";
print_r($all);
echo '</pre>';
?>
public function find_by_sql($sql) {
$this->query($sql);
$rows = $this->resultset();
return $rows;
}
public function query($query){
$this->stmt = $this->dbh->prepare($query);
}
public function resultset(){
$this->execute();
return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
}
public function execute(){
return $this->stmt->execute();
}
这样一切都按预期工作并返回所有tbl_staff细节。
但是我想更改表名以从像这样的变量中提取名称
<?php
$table = "tbl_staff";
$all = $database->find_by_sql('SELECT * FROM "'.$table.'"'); echo '<pre>';
echo "<b> Find all rows </b></br>";
print_r($all);
echo '</pre>';
?>
返回语法错误或访问冲突的服务器错误:1064您的SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在第1行''tbl_staff''附近使用正确的语法
我只尝试过$ table,'$ table'和{$ table},但它似乎将字符串读作$ table而不是替换为变量。 PDO语句有不同的规则吗?我有点失去了掌握PDO所以道歉,如果这是一个简单的
答案 0 :(得分:1)
PHP不评估单引号中使用的变量,它将它们视为文字。使用双引号如下:
$all = $database->find_by_sql("SELECT * FROM $table");
此外,$table
附近有额外的引号,例如"$table"
,它们会被视为:
select * from "tbl_staff"
因此语法错误,这不是你想要的。
答案 1 :(得分:0)
只需删除双引号:
$all = $database->find_by_sql('SELECT * FROM '.$table);