2012-11-30 2 views
3

저와 함께하시기 바랍니다, 저는 여기 새로 왔습니다. 그리고 저는 PHP로 막 시작했습니다. 솔직히 말해서, 이것은 나의 첫 번째 프로젝트이기 때문에 자비를 베풀어주십시오. :)PHP를 통해 MySQL 데이터베이스에서 행 검색하기

$row = mysql_fetch_array(mysql_query("SELECT message FROM data WHERE code = '". (int) $code ."'   LIMIT 1")); 
    echo $row['message']; 

미리 정의 된 '$ code'변수를 기반으로 데이터베이스에서 메시지를 가져 오기에는 충분합니까? 이미 데이터베이스에 성공적으로 연결되었습니다.

이 코드 블록은 아무것도 반환하지 않는 것처럼 보입니다. 단지 공백입니다. :(

나는 어떤 제안과 도움 감사 드리겠습니다 :)

업데이트 :.

코드는 지금 읽

<?php 
    error_reporting(E_ALL); 
    // Start MySQL Connection 
    REMOVED FOR SECURITY 
    // Check if code exists 
    if(mysql_num_rows(mysql_query("SELECT code FROM data WHERE code = '$code'"))){ 
    echo 'Hooray, that works!'; 
    $row = mysql_fetch_array(mysql_query("SELECT message FROM data WHERE code = '". (int) $code  ."' LIMIT 1")) or die(mysql_error()); 
    echo $row['message']; 
    } 
    else { 
    echo 'That code could not be found. Please try again!'; 
    } 
    mysql_close(); 
    ?> 
+0

,'쿼리의 끝. – Kermit

+0

방금 ​​배우는 분이라면, MySQL의 기존 또는 더 이상 사용되지 않는 MySQL 인터페이스 대신 준비된 문으로 MySQLi 또는 PDO를 사용하는 자습서를 찾으십시오. –

+0

@njk 위의 응답을 참조하십시오. 나머지 코드는 실행되지 않으므로 내 코드가 분명 결함이 있습니다. –

답변

1

그것은 경우 이후 이런 식으로 함께하지 체인 기능을하는 것이 가장 좋습니다 쿼리가 실패하면 가져 오기도 실패하고 실제로 문제가 무엇인지 나타내는 오류 메시지가 표시됩니다.

또한 SQL 쿼리에서 정수 값을 따옴표로 묶지 마십시오.

if(! $rs = mysql_query("SELECT message FROM data WHERE code = ". (int) $code ." LIMIT 1")) { 
    die('query failed! ' . mysql_error()); 
} 
$row = mysql_fetch_array($rs); 
echo $row['message']; 

표준 ...

여전히 빈 반응을 얻고 있다면 당신은 얻지 못하고 있다는 것을 확인 할 수 있습니다 "사용되지 않는 ㅋ ㅋ ㅋ ㅋ ㅋ ㅋ이 때문에 mysql_* 기능을 사용하지 않습니다" 0 개의 행이 반환되었습니다. 추가 테스팅은 쿼리가 올바르게 형성되었는지 확인하기 위해 질의를 수행하고 올바른 데이터를 반환하는지 직접 확인하기 위해 실행합니다.

+0

이제 코드에 관계없이 데이터베이스에 첫 번째 메시지 만 표시됩니다. : –

+0

글쎄, 나는 데이터베이스의'code' 컬럼이'INTEGER' 데이터 타입이라는 가정에 넘어갔습니다. 만약'CHAR' /'VARCHAR'/etc라면 당신은 그것을 감쌀 것입니다 작은 따옴표로 묶으십시오. 쿼리와 테스트를'echo '해야합니다. – Sammitch

+0

작은 따옴표로 묶으십시오.:) –

0

일부 의견 :

  1. mysql_*를 사용하지 마십시오. 더 이상 사용되지 않습니다. 쿼리 (여기서, $code)에 값을 입력 할 때마다 하나 mysqli_* 기능 또는 PDO Library
  2. 를 사용, 항상 오류를 확인 SQL 주입을
  3. 을 방지하기 위해 하나 mysqli_real_escape_string 또는 PDO's quote 기능을 사용하십시오. PDO를 사용

예 :

추가 '또는 죽을 필요 (mysql_error를을())
//connect to database 
$user = 'dbuser'; //mysql user name 
$pass = 'dbpass'; //mysql password 
$db = 'dbname'; //name of mysql database 
$dsn = 'mysql:host=localhost;dbname='.$db; 
try { 
    $con = new PDO($dsn, $user, $pass); 
} catch (PDOException $e) { 
    echo 'Could not connect to database: ' . $e->getMessage(); 
    die(); 
} 

//escape code to prevent SQL injection 
$code = $con->quote($code); 
//prepare the SQL string 
$sql = 'SELECT message FROM data WHERE code='.$code.' LIMIT 1'; 
//do the sql query 
$res = $con->query($sql); 
if(!$res) { 
    echo "something wrong with the query!"; 
    echo $sql; //for development only; don't output SQL in live server! 
    die(); 
} 
//get result 
$row = $res->fetch(PDO::FETCH_ASSOC); 
//output result 
print_r($row); 
관련 문제