2013-03-04 4 views
2

PHP에서 더 이상 사용되지 않는 mysql 확장을 사용하여 준비된 문을 사용할 수 있습니까? 나는 mysqli 또는 PDO를 언제든지 얻을 수없고 사용자가 제공 한 텍스트에 대해 RLIKE 조회를 수행 할 서버가 있습니다. mysql_real_escape_string()이 사용될 것이지만 그것이 충분하지 않을까 우려했다.mysqli 또는 PDO가없는 PHP 준비 문

+2

사용중인 PHP 버전은 몇 통입니까? mysqli 없습니까? PHP의 5.0 버전에서 소개되었지만 PDO (표준은 나오지 않았지만 그 이후로 쉽게 설치 될 수 있습니다.)와 똑같습니다. –

+0

서버의 상황이 좋지 않습니다. 내년에 표준 램프 박스를 마련하고 PDO로 이전 코드를 이전 할 계획이 있지만 현재 FreeBSD는 여러 버전의 구식이며 파손을 우려하여 업그레이드하거나 다시 컴파일하려고하지 않습니다. . – jerrygarciuh

+2

PHP4.x 및 이전 버전 5.0의 경우 userland에 PDO가 다시 구현되었습니다. http://xpdo.org/ 또는 http://ge.tt/44rtW5a/v/0 참조 – mario

답변

2

다음은 PREPARE 및 EXECUTE 사용을 보여주는 사용되지 않는 mysql API를 사용하는 PHP 스크립트입니다. 나는 이것을 PHP 5.3.15와 MySQL 5.5.29로 테스트했으며, 나에게 적합하다. 그러나, 나는 그것을 권장하지 않습니다.

<?php 

$x = 3; 
$y = 4; 

mysql_connect('localhost', 'root', 'xxxx') or die(mysql_error()); 
mysql_select_db('test'); 

mysql_query("SET @sql = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse'"); 
mysql_query("PREPARE stmt FROM @sql"); 
mysql_query("SET @x = $x"); // SQL injection! 
mysql_query("SET @y = $y"); // SQL injection! 
$result = mysql_query("EXECUTE stmt USING @x, @y"); 
while ($row = mysql_fetch_assoc($result)) { 
    print $row["hypotenuse"] . "\n"; 
} 

mysql_close(); 

내가 코멘트에서 언급 한 바와 같이, 미스 이런 종류의 준비 쿼리의 포인트, 당신이 당신의 SET 문에 가능한 신뢰할 수없는 콘텐츠를 보간하기 때문에.

PHP 설치를 수정하고 mysqli 또는 PDO_mysql 확장을 활성화해야하므로 실제 API 수준 준비 및 실행을 사용할 수 있습니다.