2013-08-10 4 views
-1
여기에 사람들의 무리에 의해 제안 : 여기

PHP 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>'; 
?> 

같은 변수에서 이름을 끌어 테이블 이름을 변경하려면 : 당신은 당신의 SQL 구문에 오류가 1064; 'tbl_staff' 'near line 1'근처에서 사용할 올바른 구문에 대해서는 MySQL 서버 버전에 해당하는 설명서를 확인하십시오.

Ive가 $ table, '$ table'및 {$ table}을 시도했지만 읽을 것으로 보입니다. 문자 그대로 $ table이며 변수로 대체되지 않습니다. PDO 진술과 다른 규칙이 있습니까? PDO로 그립을 잃어 버렸기 때문에 조금 실수합니다.

+0

이 무엇입니까? – Maximus2012

+0

'$ table'에서 큰 따옴표를 제거하십시오. – ironcito

답변

1

PHP는 작은 따옴표 안에 사용 된 변수를 평가하지 않으므로 리터럴로 취급합니다. 다음과 같이 큰 따옴표를 사용

$all = $database->find_by_sql("SELECT * FROM $table"); 

또한 당신은 떨어질 것 "$table" 같은 $table 주변에 추가 인용했다 :

select * from "tbl_staff" 

따라서 구문 오류, 이것은 당신이 원하는 없습니다.

+0

감사합니다. – user1547410

0

그냥 따옴표를 제거 : SELECT * 사용하거나이 다른 쿼리도 있습니다 만 쿼리 tbl_staff FROM :

$all = $database->find_by_sql('SELECT * FROM '.$table);