2017-01-17 15 views
0

, 그것은 나에게 나타납니다PHP/mysql : mysql_ *에서 mysqli_ *로 실행 가능한 임시 패치를 (SELECT, {resource}) ({resource}, SELECT)로 변경하고 있습니까? MySQL의 *()와 mysqli의 *() 함수의 가족의 응용 프로그램의 차이의 첫 번째 검사에

$seta = mysql_query("SELECT * FROM table WHERE field = $Filter", $database); 

빠르게 교체 할 수 있습니다 :

$seta = mysqli_query($database, "SELECT * FROM table WHERE field = $Filter"); 

,536 : 마찬가지로, 또한

IF ($A = mysql_fetch_array($seta)) { 
    do { 
    //code here 
    } while ($A = mysql_fetch_array($seta)); 
} 

가로 대체 될 수 있다는 것을 나타납니다

IF ($A = mysqli_fetch_array($seta)) { 
    do { 
    //code here 
    } while ($A = mysqli_fetch_array($seta)); 
} 

예상대로 작동합니까? mysqli *() 전에 작동했기 때문에?

참고 : 나는 SHOULD이 작업을 수행 할 경우 내가 요구 하진 않았어, 내가 CAN이 작업을 수행 할 경우에만 가능합니다. 나는 잘 부러진 다리에 반창고를 때리는 것은 쓸모가 없다는 것을 잘 알고있다. 말하자면, 나는 3 월 데모가 준비되기 전에 코딩/테스팅 시간이 많지 않다.

예, 저는 이것이 취약한 코드임을 이해합니다. 나는 안전 장치가없는 생산에 가지 않을 것이다. 나는 또한 mysqli *() 계열의 모든 기능을이 방법으로 사용하지 않는다는 것을 알고있다.

내 목표는 그와 같이 시간이 많이 걸리지 않을 때 모든 것을 정확하게 리팩터링하는 것입니다 (예, 유명한 마지막 프로그래머 단어). 데모 버전을 실행하려면 패치 코드가 필요합니다. 그러면 은퇴 할 수 있습니다.

작동중인 프로토 타입 (원 고대와 서버 모두에서 소프트웨어 업데이트가 필요함을 보여주기 위해 노력하고 있습니다.)을 통해 PHP v4.x 블루스 뒤에.

프로젝트 : 또한 확인
PHP/MySQL better user searching

: 제목 위
How to upgrade from mysql* to mysqli*?
PHP Migrating from mysql* to mysqli
가 함께

+1

무엇이 문제입니까/문제입니까? * "내가이 일을해야하는지 묻고 싶지 않다. 내가이 일을 할 수있을 때만."- 너를 막고있는 게 뭐야? –

+0

@ fred-ii 저를 용서하십시오, 나는 나의 질문이 명확했다는 것을 생각했다. 소식이 수정되었습니다. 필자는 함수 패밀리의 구문/연산에 대한 이해가 가장 기본적인 의미에서 올바른지 묻습니다. –

+0

* "mysqli *() 전에 작동 했으므로 기대했던대로 작동합니까?"* - 테스트 db/스크립트에서 시험해보십시오. 구문 오류가 없으면 어떻게 실패할지 알 수 없습니다. db 연결을 첫 번째 인수로 전달해야하는 몇 가지 mysqli_ 함수가 있음을 기억하자. 일단 그렇게하면 모든 것이 계획대로되어야합니다. 다만 다른 MySQL API를 혼합 할 수는 없다는 것을 기억하십시오. –

답변

2

신속하고 더러운 방법의 서식을 방지하기 위해 밑줄 trimed했다 더러움에 대한 강조는 mysql_querymysqli_query으로 변환하여 이렇게하는 것입니다. 문제는 mysql_query이 정말 사용하기에 clunky하므로 코딩 스타일이 아무 것도 정리하지 못하게하는 것입니다.

mysqli을 원하면및 bind_param을 사용하여 쿼리에 사용자 데이터를 추가하는 것이 좋습니다. 그렇다면 PDO로 전환하는 것이 좋습니다. 더 유연하고 유용한 데이터베이스 레이어입니다. 그러면 게이트 밖으로 SQL injection bugs의 대부분을 풀 수 있습니다. 또한 객체 지향 인터페이스를 사용하여 업데이트 된 코드가 명확 해 지도록 제안합니다. 단일 i의 차이점은 간과하기 쉽고 일반적으로 덜 장황합니다.당신은 당신이 모든 SQL 실수를 잡을해야이 일에 대해 징계를하는 경우

$stmt = $database->prepare("SELECT * FROM table WHERE field=?"); 
$stmt->bind_param('s', $filter); 
$res = $stmt->execute(); 

: 같은 즉

, 당신의 대체 코드가 보인다.

PDO 때문에 명명 된 매개 변수의 좋네요 :

$stmt = $database->prepare("SELECT * FROM table WHERE field=:filter"); 
$res = $stmt->execute(array('filter' => $filter)); 

는 일반적으로 장기에 적은 코드를 의미한다.

+0

흠. 우선, 고마워. 신속하고 더러운 교체를 시도하는 것은 테스트를 위해 시간을 절약하는 것이 었습니다. 내가 해야할지는 모르겠지만, 나는 당신의 대답을 완전히 포기하지 않습니다. 로컬 IDE에 복제하고 싶습니다. mysqli *()를 사용하여 테스트 할 수있는 곳으로 가져 오면됩니다. 내가 다른 것을 변경하지 않으면 프로덕션 서버로 되돌릴 수 있고 데모 후에 올바르게 수정 할 수 있습니다. 나는 처음으로 시간이 있다고 생각하지 않는다. –

+0

여기에 버전 제어 기능이 있는지 확인하십시오. 변경 사항을 적용 할 때마다 코드를 diff * 할 수 있고 다른 것들을 신경 쓰지 않도록 할 수 있습니다. 코드를 잘 보면서 코드 기반을 향상시킬 수있는 방법에 대해 [PHP 올바른 방법] (http://phptherightway.com)을 살펴보십시오. – tadman

+0

물론입니다. 전체 프로젝트가 총 10k 줄 미만인 데 대해 감사하고, 몇 년 전 CSS를 사용하는 동안 기본 코드는 모두 내 것이 었습니다. –