PHP PDO在函数中传递变量

时间:2013-08-10 02:00:18

标签: php mysql pdo

我正在按照这里的一群人的建议转移到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所以道歉,如果这是一个简单的

2 个答案:

答案 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);