2011-10-05 1 views
0

마침내 MySQL에 대한 MS Access를 졸업했습니다. 불행히도, 나는 질의조차 제대로 할 수 없다. 누군가 나에게 무엇이 잘못되었는지 말해 줄 수 있습니까? 내가 PHP에서 지정한 '잘못된 쿼리'메시지가 계속 나타납니다.PHP + MySQL 쿼리 ->이 SQL의 문제점 (짧음)

<?php 
@ $db = mysql_connect('localhost', 'root', 'root', 'newdatabase'); 
if (!$db) { 
    die ('Failed to connect to the database.'); 
} 


$query = "SELECT first FROM demographics"; 
$result = mysql_query($query); 

if (!$result) { 
    die('invalid query'); 
} 

while ($row = mysql_fetch_assoc($result)) { 
    echo $row['first']; 
} 

?> 

또한, 나는 독서하고 책은 내가 사용하는 것이 알려줍니다

new mysqli('localhost', 'root', 'root', 'newdatabase') 

내가 위의 코드에서 사용되는

mysql_connect 

에 같은 반대 연결합니다. 나는 새로운 mysqli으로 데이터베이스에 연결할 수 없었습니다. 내가 사용하는 것이 중요합니까?

+0

코드 블록이 구문 색상을 사용할 수 있으므로 코드에 인용 블록 대신 코드 블록을 사용하십시오. –

+0

PHP에는 mysql에 액세스하는 3 가지 다른 방법이 있습니다. mysqli 클래스/함수, mysql 함수, PDO 클래스. 일반적으로 PDO가 권장되는 옵션입니다. – dqhendricks

+0

또한 새 코드의 경우 MySQL 확장이 아닌 MySQLI 확장을 사용하려고합니다. MySQL 확장은 (고대) MySQL 3.x 데이터베이스와의 호환성을 위해서만 유지됩니다. MySQL 4.x는 MySQLI API를 소개했습니다 (그리고 4.x조차도 요즘은 정말로 오래된 것입니다). –

답변

3

mysql_connect()의 네 번째 매개 변수는 데이터베이스 이름이 아닙니다. 추가 연결을 새로 설정하거나 기존 연결을 사용할지 여부를 지정하는 부울입니다. 대개는 생략됩니다. mysql_select_db()을 사용하여 데이터베이스를 선택하십시오. 코드에서 데이터베이스를 선택하지 않았으므로 쿼리가 실패 할 가능성이 큽니다.

$db = mysql_connect('localhost', 'root', 'root'); 
if (!$db) echo mysql_error(); 
else mysql_select_db("database"); 

참고 나는 mysql_connect() 호출의 @을 제거했습니다. @은 오류를 표시하지 않으므로 연결에 어떤 문제가 있는지 알 수 없습니다.

쿼리의 성공 또는 실패를 테스트 할 때는 die()을 사용하지 마십시오. 대신 응용 프로그램을 개발하는 동안 mysql_error()을 반향 출력하십시오. 프로덕션에서는 대신에 echo을 쓸 수 있습니다. 기본 mysql_* 기능을 대신 MySQLi를 사용으로

if (!$result) { 
    echo mysql_error(); 
} 

는 모듈, MySQLi 객체 지향 방식으로 사용되며 모두보다 효율적으로 사용하는 것이 더 안전 할 수 준비된 명령문을 제공 할 수 있습니다. 위의 주석에서 언급했듯이 PDO은 종종 PHP의 RDBMS와 상호 작용할 수있는 가장 유연한 API로 권장됩니다.

+0

굉장 했어요! 감사! – jerry

+0

@Jerry 도와 드리겠습니다. 진행하면서 행운을 빈다. SQL 인젝션과 mysql_real_escape_string()의 사용법을 꼭 읽어 보아라. Access에서 작업하는 것과는 다릅니다. –

+0

감사합니다. Michael, 나는 분명히 할 것이다! 좋은 것을 얻으십시오 – jerry