2012-09-17 5 views
0

PHP와 Postgres를 사용하여 간단한 삽입 작업을 수행하기 위해 준비된 문을 사용하려고합니다. 지금까지, 나는이 일을했습니다문자열 보간 된 준비된 문이 구문 오류로 인해 실패합니다.

내가 php.net의 페이지에서 기본적으로 촬영했습니다, 그리고 내가 잘못 한 일을 알아낼 수 없습니다
<?php 
$conn_string = "host=localhost port=5432"; // plus us/pw 
$dbconn = pg_connect($conn_string); 

$table = 'business_primary_category'; 
$column = 'primary_category'; 
$tag = 'restuarant'; 


// Prepare a query for execution 
$result = pg_prepare($dbconn, "my_query", 'SELECT * FROM $table WHERE $column = $1'); 

// Execute the prepared query. Note that it is not necessary to escape 
// the string "Joe's Widgets" in any way 
$result = pg_execute($dbconn, "my_query", array("$tag")); 

?> 

. 그것을 사용하기 위해 라이브러리를 설치해야합니까? 감사! 'SELECT * FROM $table WHERE $column = $1'에 따옴표를 사용 ... 밖으로 점프

Warning: pg_prepare() [function.pg-prepare]: Query failed: ERROR: syntax error at or near "$" at character 15 in /home/url **......** pdo.php on line 11 

Warning: pg_execute() [function.pg-execute]: Query failed: ERROR: prepared statement "my_query" does not exist in /home/url **......** pdo.php on line 15 

Warning: pg_execute() [function.pg-execute]: Query failed: ERROR: prepared statement "my_query" does not exist in /home/url **......** pdo.php on line 18 
+3

변수를 평가하려면 쿼리 주위에 큰 따옴표가 필요할 수 있습니다. –

답변

3

변수를 보간하려면 큰 따옴표를 사용해야합니다. 그렇지 않으면 PHP는 그것을 문자열 리터럴로 취급합니다. 시도해보십시오 :

$result = pg_prepare($dbconn, "my_query", "SELECT * FROM $table WHERE $column = $1"); 
+0

안녕하세요. 감사! 확실히 오류를 해결했습니다. 산뜻한! 나는 일종의 PDO 패키지를 설치해야한다고 걱정했다. 그게 뭔가 다른 거니? – 1252748

+0

PDO는 데이터베이스에 액세스하는 라이브러리입니다. 기존의'pg_ *'함수를 대체합니다. PDO는 더 안전한 코드를 작성하기 쉽기 때문에 권장됩니다 - 기본적인 mysql 함수가 제공하지 않는 prepared statement와 bound parameters를 지원합니다. 이미 사용하고 있으므로 보안을 위해 PDO에있는 모든 것을 다시 쓸 필요가 없습니다. – andrewsi

+0

아, 좋아. 그래서 분명히. 이 사용자가 제공 한 문자열은이 준비된 명령문 '물건'을 사용하고 있기 때문에 확실히 충분히 이스케이프 처리됩니까? – 1252748

2

우선 :

이들은

내가 얻을 오류입니다.

관련 문제