2013-09-22 2 views
0

사이트를 검색했지만 작동하는 특정 문제에 대한 응답을 찾을 수 없습니다. 두 파일을 가지고 있는데 첫 번째 파일은 내 index.php이고 두 번째 파일은 분명히 함수가 들어있는 function.php 파일입니다.SQL에서 정보를 검색하는 함수 작성

function sql_get ($ lang, $ tabler , $의 노 젓는 사람) {

if ($lang == "heb") { 
    $result = mysql_query("SELECT * FROM %s WHERE id = 0", 
     mysql_real_escape_string($tabler)); 
    $row = mysql_fetch_array($result); 
    return $row['$rower']; 
} 

else if ($lang == "rus") { 
    $result = mysql_query("SELECT * FROM %s WHERE id = 0", 
     mysql_real_escape_string($tabler)); 
    $row = mysql_fetch_array($result); 
    return $row['$rower']; 
} 

는 GET에서 언어에 대한 정보를 (얻을 가정이 코드, 그것은)는 모든 것을 가진 괜찮습니다, 그것을 얻는 SQL 테이블과이 테이블에서 특정 행 어디 id는 0입니다.

삽입 된 행의 정보를 반환합니다.

Warning: mysql_query() expects parameter 2 to be resource, string given in /home/elenbyin/public_html/elenby.co.il/vadim/functions.php on line 16 

Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in /home/elenbyin/public_html/elenby.co.il/vadim/functions.php on line 17 

와 언어가 "RUS"인 경우 :

Warning: mysql_query() expects parameter 2 to be resource, string given in /home/elenbyin/public_html/elenby.co.il/vadim/functions.php on line 23 

경고 :로 MYSQL_ASSOC()가 예상합니다 매개 변수 (1) 자원이 될 수있는 언어가 "히"입니다

내 경고 및 오류 , null 주어진 /home/elenbyin/public_html/elenby.co.il/vadim/functions.php 24 행

index.php 파일의 함수 호출은 다음과 같습니다.

도와 주려고하는 사람들, 특히 나를 도울 사람들에게 감사 할 것입니다.

고마워요!

+0

** 규칙 1 ** : [mysql_'] (http://php.net/mysql) 함수는 사용하지 않습니다.이 함수는 더 이상 사용되지 않습니다. [mysqli_'] (http://php.net/mysqli) 또는 ['PDO'] (http://php.net/pdo) –

+1

당신은 똑같은 일을 내부에서하고 있음을 알아 챘습니까? 'if'와'else' 절은 무엇입니까? – alfasin

+0

그래, 내가 알아 차 렸는데, 내가 그런 식으로 일할 수있게되면 바뀔거야 –

답변

0

먼저, 함수 내부의 데이터베이스에 연결하지 않았습니다. 어딘가에 데이터베이스를 열었다면 mysql으로이 문제를 해결할 수 있지만 그렇게해서는 안됩니다.

둘째, 당신은 mysql_query()에 두 번째 매개 변수로 변수를 전달하고 있지만 mysql_query() 쿼리가 첫 번째 매개 변수로 완성 될 것으로 예상, 두 번째 매개 변수는 연결 자원 THT해야하는 것은 데이터베이스, 당신에게 천국에 연결 알았어.

쿼리 구조에서 sprintf()을 사용하는 것처럼 보입니다.

이 당신이, 데이타베이스 연결에 opend 한 가정, 당신을 위해 쿼리를 작성해야합니다 :

$query = sprintf("SELECT * FROM %s WHERE id = 0", 
    mysql_real_escape_string($tabler)); 
$result = mysql_query($query) or die(mysql_error()); 

참고 : mysql를 사용되지 않습니다. 당신은 그것을 사용해서는 안됩니다. 대신 mysqli 또는 PDO을 사용하십시오. mysqli을 사용하는 경우 데이터베이스 연결을 전달하는 것이 더 엄격해야합니다.

+1

내가 물어볼지도 모르겠다면, 왜 sprintf? – Loko

+0

OP의 원래 쿼리 형식에는'printf()'플레이스 홀더 ('% s')가 포함되어 있으므로 sprintf()를 사용하여 쿼리를 생성했습니다. 이것을하기위한 다른 방법이 많이 있지만,'sprintf()'는 이스케이프 나 다른 전처리가 필요한 수많은 매개 변수로 쿼리를 생성하는 편리한 방법입니다. 이 경우에는 실제로 과잉입니다. –

+0

내 코드가 무엇이든 상관없이 동일한 오류가 계속 발생합니다. 경고 : mysql_result()는 매개 변수 1이 리소스가 될 것으로 예상하고 부울은 /home/elenbyin/public_html/elenby.co.il/vadim/tryout.php에서 온라인으로 제공됩니다. 14 –

0

Amal이 제안했듯이 - mysql_ * 함수를 사용하지 않는 것이 더 이상 사용되지 않을뿐만 아니라 sql-injection에도 취약 해집니다.

당신이해야 코드를 해결하기 위해, 말했다 :

$table = mysql_real_escape_string($tabler); 
$sql = "SELECT * FROM $table WHERE id = 0"; 
$link=mysql_connect('host','user','pass'); 
$result = mysql_query($sql, $link); 
... 

는 mysql_query의 두 번째 (및 옵션) 매개 변수가 resource해야으로 - 문자열이 아니라!

+0

나는 "select * from $ table where id = 0"이라고 생각하지 않는다. mysql_real_escape_string (tabler)가 틀렸다. : http : //nl1.php.net/manual/en/function.mysql-query.php – Loko

+0

@koko 함수의 서명을 확인했다. (링크 된 링크에서) : resource mysql_query (string $ query [, resource $ link_identifier = NULL])'second (옵션) 매개 변수는 문자열이 아닌 자원이어야합니다. 당신은 내가 대답에서 쓴 것을 믿지 않는다면 더 많은 예제를 구글에 올릴 수있다;) – alfasin

+0

그래, 나는 그것에 대해 좀 더 연구 할 것이다. 나는 궁금했다. – Loko

관련 문제