MySQL에 연결하려면 PHP를 사용해야합니까??
MySQL 데이터베이스에 연결할 때 PHP는 편리하고 효율적인 솔루션을 제공합니다. PHP를 사용하면 MySQL에 연결하려면 추가 코드를 다운로드하거나 플러그인을 설치할 필요가 없습니다. 실제로 PHP는 MySQL에 바로 연결할 준비가되어있어 데이터베이스 연결을위한 강력한 도구입니다.
MySQL에 PHP를 연결하는 것은 몇 단계만큼 간단합니다
- MySQL 설치에 연결하십시오.
- MySQL 데이터베이스를 사용하십시오.
- 데이터베이스에 SQL 쿼리를 보냅니다.
- 결과를 검색하고 처리합니다.
이 단계는 데이터베이스와 상호 작용하는 모든 PHP 스크립트의 기초가됩니다. 테이블을 만들거나 검색 수행 또는 데이터베이스에 데이터 추가하든 첫 두 단계는 일정하게 유지됩니다.
PHP의 MySQL 데이터베이스에 연결하는 과정을 자세히 살펴 보겠습니다
연결을 설정하려면 PHP 스크립트가 데이터베이스 호스트, 사용자 이름 및 비밀번호를 알아야합니다. 이 정보는 MySQL 명령 줄 클라이언트를 사용할 때와 마찬가지로 PHP가 연결을 시작할 수 있습니다.
“Connect라는 새 PHP 스크립트를 만들어 시작하십시오.PHP “및 다음 줄을 입력하십시오
데이터베이스가 PHP 및 웹 서비스 파일과 동일한 컴퓨터에서 실행중인 경우 데이터베이스 호스트 이름은 일반적으로 “LocalHost입니다.”
“mysql_connect”명령은 데이터베이스 호스트, 사용자 이름 및 비밀번호를 매개 변수로 사용하고 연결을 시작합니다. 연결이 실패하면 “다이”기능은 스크립트가 계속되지 않도록 오류 메시지를 표시하는 데 사용됩니다. 그렇지 않으면 스크립트에는 성공적인 연결 메시지가 표시됩니다.
이 단계를 수행하면 PHP가 MySQL 데이터베이스에 쉽게 연결하고 웹 응용 프로그램에서 MySQL의 전력을 활용할 수 있습니다.
자주 묻는 질문:
1. MySQL에 연결하는 데 PHP를 사용하는 것이 편리한 이유?
PHP는 추가 코드 또는 플러그인없이 MySQL에 연결할 준비가되어 있습니다. 이 편의성은 데이터베이스 연결이 필요한 웹 애플리케이션을 구축 할 때 시간과 노력을 절약합니다.
2. PHP를 사용하여 원격 MySQL 데이터베이스에 연결할 수 있습니까??
예, PHP는 적절한 호스트, 사용자 이름 및 비밀번호를 제공하여 원격 MySQL 데이터베이스에 연결할 수 있습니다. 연결을 설정하는 데 필요한 액세스 권한 및 네트워크 연결이 있는지 확인하십시오.
삼. PHP를 MySQL에 연결하기위한 필수 단계는 무엇입니까??
PHP를 MySQL에 연결하기위한 필수 단계에는 데이터베이스 호스트, 사용자 이름 및 비밀번호 제공, “MySQL_Connect”명령과의 연결 설정 및 “다이”기능을 사용한 잠재적 오류 처리가 포함됩니다. 연결되면 SQL 쿼리를 실행하고 반환 된 결과를 처리 할 수 있습니다.
4. MySQL 이외의 데이터베이스에 연결하기 위해 PHP를 사용할 수 있습니까??
예, PHP는 PostgreSQL, Oracle 및 Microsoft SQL Server를 포함하여 MySQL 이외의 다양한 데이터베이스에 대한 연결을 지원합니다. 그러나 특정 단계와 기능은 연결하는 데이터베이스 시스템에 따라 다를 수 있습니다.
5. PHP를 MySQL에 연결하는 것이 얼마나 안전합니까??
데이터베이스 연결의 보안. PHP 자체는 SQL 주입 및 기타 보안 취약점을 방지하는 기능과 기술을 제공하지만 개발자는 추가 보안 조치를 구현하여 응용 프로그램의 전반적인 보안을 보장해야합니다.
6. 여러 PHP 스크립트가 동시에 동일한 MySQL 데이터베이스에 연결할 수 있습니까??
예, 여러 PHP 스크립트가 동시에 동일한 MySQL 데이터베이스에 연결할 수 있습니다. 그러나 충돌 및 성능 문제를 방지하기 위해 연결 및 리소스를 효과적으로 관리하는 것이 중요합니다. 데이터베이스 연결을 올바르게 닫고 연결 풀링 기술을 사용하여 멀티 스크립트 환경에서 데이터베이스 액세스를 최적화 할 수 있습니다.
7. PHP 및 MySQL을 사용할 때 연결 오류 문제를 해결하려면 어떻게해야합니까??
연결 오류가 발생하면 제공된 호스트, 사용자 이름 및 비밀번호를 확인하여 정확도를 확인하십시오. MySQL 서버가 PHP 환경에서 실행되고 액세스 할 수 있는지 확인하십시오. PHP에서 오류보고를 활성화하여보다 자세한 오류 메시지를 제공하여 연결 문제 해결 및 해결 문제를 돕습니다.
8. PHP를 여러 MySQL 데이터베이스에 연결할 수 있습니까??
예, PHP는 동일한 스크립트 또는 다른 스크립트에서 여러 MySQL 데이터베이스에 연결할 수 있습니다. 각 데이터베이스에 대해 다른 매개 변수를 사용하여 별도의 연결을 설정하기 만하면. 성능 및 리소스 사용을 유지하려면 여러 연결을 효율적으로 관리하는 것이 중요합니다.
9. MySQL과 함께 PHP 준비 문을 사용할 수 있습니까??
예, PHP는 준비된 진술을 지원하며, 사용자가 제공 한 데이터로 SQL 쿼리를 실행하는 안전하고 효율적인 방법을 제공합니다. 준비된 명령문은 데이터 입력에서 쿼리 로직을 분리하여 SQL 주입 공격을 방지하는 데 도움이됩니다.
10. MySQL에 연결하기위한 PHP에 대한 대안이 있습니까??
PHP는 단순성과 광범위한 채택으로 인해 MySQL에 연결하는 데 인기있는 선택이지만 Python, Java 및 C#과 같은 다른 프로그래밍 언어는 MySQL 데이터베이스와 상호 작용하기위한 라이브러리 및 API도 제공합니다. 언어 선택은 프로젝트의 요구 사항과 선호도에 따라 다릅니다.
MySQL에 연결하려면 PHP를 사용해야합니까?
상수는 모든 uppercase 문자로 입력됩니다. 캡 경기장’T 필요하지만’그 중 하나입니다 “PHP 프로그래머처럼 말하십시오” 것들. 상수가 변수와 다르게 보이기를 원하며 모든 대문자 이름을 사용하는 한 가지 방법은. 상수도 돈도 있습니다’t가있다 $ 변수와 상수를 차별화하는 또 다른 방법 인 이름보다.
PHP & MYSQL : Brett McLaughlin의 누락 매뉴얼
완전히 액세스하십시오 PHP & MYSQL : 누락 된 매뉴얼 그리고 60k+ 기타 타이틀, O’Reilly의 10 일 무료 평가판.
라이브 이벤트, 직무 역할에 의해 큐 레이션 된 코스 등이 있습니다.
4 장. PHP 연결 MySQL
이제 당신’PHP와 MySQL의 약간의 힘을 보았습니다’이 두 juggernauts를 함께 가져올 시간입니다. 많은 프로그래밍 언어를 사용하면 데이터베이스와 대화하려면 추가 코드를 다운로드하여 설치하거나 해당 데이터베이스와 대화 할 수있는 프로그램을 지원하는 작은 플러그인 모델을 설치해야합니다. PHP ISN’그래도 T처럼; 실행되는 순간부터 MySQL에 연결할 준비가되었습니다 PHP 명령.
당신은’VE는 최근에만 PHP Mastery 로의 여행을 시작했습니다’스크립트에서 데이터베이스를 사용할 준비가되었습니다. 몇 가지 새로운 명령을 배워야합니다’데이터베이스 작업. 사실, 당신’SQL을 입력하고 MySQL 데이터베이스에 대해 실행할 수있는 간단한 양식을 작성하려고합니다. 때를’PHP 프로그래머는 당신이 MySQL 명령 줄 도구.
그러다’다른 스크립트를 작성합니다. 이 스크립트는 귀하의 양식에서 모든 정보를 가져옵니다’VE를 구축하고 해당 정보를 데이터베이스에 추가 한 다음 사용자가 이름으로 다른 사용자를 검색 할 수 있도록 한 양식을 추가합니다. 한 장의 모든 것? 네 확실합니다.
간단한 PHP 연결 스크립트 작성
PHP 스크립트가 아무리 간단하거나 발전하더라도 데이터베이스와 대화하면’동일한 몇 단계로 시작합니다
- MySQL 설치에 연결하십시오.
- 사용 올바른 MySQL 데이터베이스.
- 데이터베이스에 SQL을 보냅니다.
- 결과를 다시 얻습니다.
- 결과로 무언가를하십시오.
3, 4 및 5 단계는 귀하가 무엇에 따라 변경됩니다’다시. 테이블을 만드는 스크립트는 기존 테이블을 통해 검색하는 스크립트와 약간 다르게 보입니다.
그러나 MySQL에 연결되고 올바른 데이터베이스를 사용하는 첫 두 단계. 그냥 생각해보세요 : 코드’RE를 작성하려면 시간당 $ 150 또는 $ 200를 만드는 프로그래머가 어딘가에 글을 쓰는 것과 동일한 코드입니다. (그들’수영장 옆에 라운지로 아이스 티를 제공하는 로봇이있는 많은 멋진 주택에 그 코드를 작성하십시오.))
MySQL 데이터베이스에 연결
먼저 PHP 스크립트를 데이터베이스에 연결하는 방법을 알려야합니다. 이 프로세스는 기본적으로 MySQL 명령 줄 클라이언트 (Mac OS X의 MySQL)를 시작했을 때 PHP에게 한 일을하도록합니다. 웹 서버에 연결할 때’S 데이터베이스, 아마도 followng와 같은 명령을 사용했을 것입니다
bmclaugh@akila : ~ $ mysql-host = dc2-mysql-02.Kattare.com -user = bmclaugh --password
데이터베이스 호스트, 사용자 이름 및 비밀번호를 연결할 수 있도록 PHP를 제공하려면 동일한 정보가 필요합니다.
텍스트 편집기를 발사하고 새 스크립트를 만듭니다. 불러라 연결하다.PHP . 이 스크립트는 가능한 한 간단합니다. 필요한 모든 것은 데이터베이스에 연결되기 때문입니다, 사용 올바른 데이터베이스를 한 다음 샘플 SQL 쿼리를 실행하여 작업이 올바르게 작동하는지 확인하십시오.
스크립트에 다음 줄을 입력하십시오
데이터베이스에 연결하는 오류 : " . mysql_error () . ""); 에코"MySQL에 연결되었습니다!
"; ?>
메모
만약 너라면’PHP 및 웹 서비스 파일과 동일한 컴퓨터에서 데이터베이스를 실행하면 데이터베이스 호스트 이름이 일반적으로 로컬 호스트. 로컬 호스트 말하는 방법입니다 “로컬 기계.”
그것’정말 간단합니다! 그리고 대부분의 다른 PHP 스크립트와 마찬가지로 여러분과 마찬가지로’새로운 명령이 있지만 글을 쓰고 있었지만 아마도 거의 정확히 무엇을 알고있을 것입니다’여기서 진행됩니다.
먼저, 거기’새로운 명령 : mysql_connect . 이 명령은 단순히 데이터베이스 호스트, 사용자 이름 및 비밀번호를 가져 와서 연결합니다. 그것’마치 마치 마치’당신의 실행 MySQL 도구 및 원격 데이터베이스에 연결.
메모
당신이 바꾸십시오 당신의.데이터 베이스.호스트, 당신의 이름 , 그리고 너의 비밀번호 자신의 데이터베이스의 값에.
그러나 주사위 조금? 약간 끔찍하게 들립니다 (좋아요 파리의 제왕 끔찍한 어스름 십대의 끔찍한). 사실, 그것은 약간 불쾌합니다 : 당신은 사용합니다 주사위 뭔가 5월 스크립트에서 잘못 가십시오. 에 대해 생각하다 주사위 말한대로, “내 코드가 죽으면 사용자에게 오류 코드를 버리는 것보다 덜 불쾌한 일을합니다. 이 경우, 주사위 이긴 오류 메시지를 인쇄합니다’사용자를 두려워합니다.
그러나 당신이 이해하기 전에 주사위 , 내면의 작업에 대해 조금 알아야합니다 mysql_connect . 언제 mysql_connect 실행, 데이터베이스에 대한 기존 연결을 생성하거나 재사용합니다. 그런 다음 해당 연결을 PHP 프로그램에 반환하고 다른 모든 PHP-MYSQL 명령을 사용할 수 있도록합니다’곧 배우십시오. 그러나 만약 mysql_connect ~할 수 있다’T 해당 연결 생성 – 예를 들어 데이터베이스가 ISN 인 경우’T 달리기 또는 당신’VE는 나쁜 호스트 또는 사용자 이름을 얻었습니다 mysql_connect 매우 다른 값을 반환합니다 거짓 .
그래서 뭐’스크립트에서 실제로 일어나는 S는 다음과 같습니다
그러나 그것은 많은 타이핑이므로 PHP는 다음과 같이 단축 할 수 있습니다. 데이터베이스에 연결하는 오류 : " . mysql_error () . ""); 에코"MySQL에 연결되었습니다!
"; ?>
이 스크립트는 더 짧을뿐만 아니라 약간 주위에 물건을 뒤집습니다. 기본적으로 연결하려고합니다 (사용하십시오 mysql_connect ), 결과가 없다면’t true ( 또는 그러면 코드의 일부) 주사위. 주사위 오류 메시지를 인쇄하지만 또한도 인쇄합니다 “죽는다.” 다시 말해, 그것은 당신의 대본을 종료합니다. 그래서 만약 mysql_connect 보고 거짓 , 그리고 주사위 실행되면 스크립트가 종료됩니다. 사용자가 이겼습니다’T를 본 적이 없습니다 “MySQL에 연결되었습니다!” 스크립트가 실행이 중지 되었기 때문에 줄입니다. 그것’작업 데이터베이스 연결을 검색하여 서버 룸 바닥에서 사망. (더 자세한 내용은 어느 시점에서 모든 사람의 상자를 참조하십시오 주사위 명령.))
뿐만 아니라 mysql_connect 가능하면 다른 기능을 설정합니다’t 연결. 다른 명령을 통해 사용할 수 있도록 오류가 발생합니다, mysql_error . 그래서 당신은 전화 할 수 있습니다 mysql_error 당신의 일부로 주사위 실제로 무슨 일이 있었는지 보여주기위한 진술.
메모
기술적으로, mysql_connect, mysql_error , 그리고 주사위 모두의 예입니다 기능 . 함수는 일반적으로 이름이 지정된 코드 블록입니다. 해당 블록이 필요할 때 언제든지 자신의 코드에서 호출 할 수 있습니다. 그것’s는 기능을 반복해서 나타내는 코드 블록을 다시 작성하는 것보다 이름으로 함수를 호출하는 것이 훨씬 빠르고 낫습니다.
두목’그래도 현재 기능에 대해 걱정합니다. 오래된 PHP 명령처럼 사용하십시오. 오래지 않아 기능을 더 잘 이해할뿐만 아니라’나만의 글을 쓰십시오.
만약에 mysql_connect 문제없이 연결하면 해당 연결이 반환됩니다. PHP는 주사위 라인을 한 다음이 줄을 실행합니다
에코 "MySQL에 연결되었습니다!
";
이 명령을 실제로 보려면 간단한 HTML 양식을 작성하고 호출하십시오 연결하다.HTML. 이 HTML을 사용하여 진행할 수 있습니다
PHP & MYSQL : 누락 된 매뉴얼
예 4-1SQL 연결 테스트
이 스크립트는 간단합니다. 양식을 작성하고 단일 버튼을 제자리에 놓고 해당 버튼을 새 새로 첨부합니다 연결하다.PHP 스크립트. 브라우저에 양식을로드하고 (그림 4-1 참조) 클릭하십시오 “MySQL에 연결하십시오.”
바라건대, 당신은 급성장하는 PHP와 MySQL 프로그래밍 경력의 가장 단순하고 가장 행복한 메시지 중 하나를 보게되기를 바랍니다’다시 연결! 성공의 달콤한 광경은 그림 4-2를 확인하십시오.
그림 4-1. 물론, 당신은 연결할 수있었습니다.HTML 더 간단합니다. 당신은 모든 구조와 CSS 참조를 버릴 수 있습니다. 그러나 누가 조금 과시하지 않고 데이터베이스에 연결하고 싶은 사람? 게다가 고객은 멋지고 깨끗한 사이트를 좋아합니다. 당신은 돈입니다’t CSS에 몇 시간을 보내야하지만 가장 기본적인 데모조차 전문적으로 보이게하며 고객이 당신을 사랑할 것입니다.
그림 4-2. 이 세 단어는 이제 PHP 스크립트가 데이터베이스에서 상상할 수있는 거의 모든 것을 수행 할 수 있음을 의미합니다. 그러나 거기’S가없는 것 : MySQL은 어떤 데이터베이스가 귀하의 데이터베이스인지 어떻게 알 수 있습니까?? 여전히 어떤 데이터베이스를 사용할 데이터베이스를 알려야합니다.
사용할 데이터베이스 선택
거기’지금 프로그래밍 코너 주변을 기다리는 멋진 것 : 거의 모든 것 mysql_ 기능의 가족은 동일하게 작동합니다 : 당신은 그들에게 몇 가지 가치를주고 유용한 것을 반환합니다. 나쁜 일이 발생하면 보통 다시 돌아옵니다 거짓 또는 존재하지 않는 객체 (대부분의 프로그래머가 부르는 것 없는 또는 무 )).
이제 PHP 스크립트를 사용하려는 데이터베이스를 MySQL에 알릴 필요가 있습니다. 거기’이에 대한 기능 : mysql_select_db .
메모
거기’대가족 mysql_ 기능. 문서 페이지를 북마크 할 수 있습니다. www.PHP.NET/MANUAL/EN/Ref.MySQL.PHP. 당신이 붙어 있다면 거기로 가서 기능이 필요한 일을 할 수 있는지 확인하십시오.
권한 사용자’ 클리닉 : 모두가 어느 시점에서 사망합니다
그것’그것들을 추가하는 것을 잊기 쉽습니다 주사위 PHP 스크립트에 대한 진술. PHP는 그렇습니다’t가 필요합니다’다음과 같은 것을 받아들이는 것을 완벽하게 기쁘게 생각합니다
mysql_connect ( "데이터베이스.주인.com ","username ","password ");
저것’동일한 코드입니다’ve는 이미 쓰여졌습니다 주사위 부분.
하지만 여기는’S THE THING : 그대로 두십시오 주사위 , 그리고 무언가 잘못되면 대본이 충돌하여 무언가를 제공합니다’정말 쓸모없는 오류 또는 당신이 할 수있는 너무 비밀스러운’T 심지어 말해도 무엇 그것은. 예를 들어, 나가는 경우 주사위 , 잘못된 비밀번호를 입력하고 스크립트를 실행하십시오’다음과 유사한 오류가 발생합니다
소켓 '/tmp/mysql을 통해 로컬 mysql 서버에 연결할 수 없습니다.양말 '(2)
믿거 나 말거나,이 오류 메시지는 실제로 유익한 메시지입니다 주사위 진술. 한 줄의 오류 처리를 추가하면 문제가 잘못 될 때 사용자에게 큰 차이가 생길 수 있습니다.
실제로 훨씬 더 크고 풀 블로우 웹 애플리케이션을 구축하기 시작하면 사용자를 멋지게 형식화 된 오류 페이지로 리디렉션하여 관리자를위한 연락처 정보 및 CSS 스타일 오류 보고서로 완료 할 수 있습니다. 그러나 그 중 어느 것도 없이는 불가능합니다 주사위 .
이제 PHP 전력으로 플러시하면 이미 거의 오류가 거의 없다고 생각할 수 있습니다. 당신은 그렇게 생각할 수 있습니다 주사위 받는 등급 아마추어를위한 것입니다’t 완벽한 코드를 작성하십시오. 불행히도, 당신이’2시에 RE UP AM 마감일을 치르려고 노력하여 지불을받을 수 있도록 뇌가 닮기 시작합니다. 모두가 실수를합니다 주사위 (다른 오류 처리 기술과 함께) 불가피한 실수가 발생할 때 준비되고 전문적인 모습을 도와주는 생명 사저 중 하나입니다.
사실, 세계에서 가장 높은 수준의 최고급 프로그래머는 오류 처리 전문가입니다. 동시에 그들은’아마 ~ 아니다 사용 주사위 . 그들’보다 강력한 오류 처리 시스템을 사용할 가능성이 더 높습니다. 오류를 처리하는 것과 같은 것’7 장에서 사용됩니다. 그러나 지금은 건강하고 자유로운 사용의 주사위 오류 처리 형태로 추가하는 데 도움이 될 것입니다.
당신은 줄 mysql_select_db 데이터베이스 이름 및 — IT 사용 해당 데이터베이스 또는 반환 거짓 . 그러니 업데이트 연결하다.PHP 에게 사용 올바른 데이터베이스 :
데이터베이스에 연결하는 오류 : " . mysql_error () . ""); 에코"MySQL에 연결되었습니다!
";
mysql_select_db ( "your-database-name")
또는 다이 ( "
데이터베이스 선택 BMClaugh : "오류 :" .
mysql_error () . "
");
에코 "
Database Bmclaugh를 사용하여 MySQL에 연결되었습니다.
"; ?>
이미 패턴을 볼 수 있어야합니다. 주사위 나쁜 일이 발생하면 스크립트가 오류를보고하고 사용자가 해당 오류를 읽은 다음 스크립트가 종료되도록합니다. 일이 잘되면 또 다른 행복한 메시지가 인쇄되어야합니다.
이 새 버전을 사용해보십시오. 방문하다 연결하다.HTML 다시 시도하고 연결하십시오 (그리고 지금 사용 ) 데이터베이스. 그림 4-3과 같은 것을보고 싶습니다. 다음으로 : 데이터베이스에 SQL을 말합니다.
그림 4-3. 다시 한번, 몇 가지 간단한 단어와 주요 일이 무대 뒤에서 진행되고 있습니다. 스크립트는 이제 MySQL과 연결되어 있으며 올바른 데이터베이스를 사용하고 있습니다.
데이터베이스를 표시하십시오’S 테이블
이제 당신’ve는 연결을 받았습니다’올바른 데이터베이스에 다시 묶여 있으면 당신은 당신이 무엇을 볼 수 있습니다’VE와 함께 일해야합니다. MySQL 도구에서 가장 먼저 한 일 중 하나는 어떤 테이블이 존재했는지보고 자신의 테이블을 만들기 시작했습니다. 거기’테이블을 만드는 데 더 많은 작업을하고 있습니다’새로운 HTML 양식과 새 스크립트로 조금만 수행합니다.
그러나 그것에 대해 다이빙하기 전에, 데이터베이스에서 어떤 테이블을 사용할 수 있는지 스크립트를 쉽게 확인할 수 있습니다. 열어 연결하다.PHP 다시, 다음 줄을 추가하십시오
$ result = mysql_query ( "show tables;");
?>
여기’또 다른 새로운 php-to-mysql 함수 : mysql_query . 너’LL은 매우됩니다, 매우 이것에 익숙합니다. 그것’s 데이터베이스에 SQL을 전달하는 열쇠. 이 기능은 SQL과 귀하에게 사용됩니다’정말 간단한 SQL을 제공했습니다
테이블 표시;
이 명령은입니다 정확히 명령 줄 도구에 SQL을 입력하는 것과 같습니다.
결과가 아닌지 확인하여 오류를 처리합니다
그러나 주사위 ? 오류 처리는 어떻습니까? 거기’그중 어느 것도없고 지금까지 당신은. 그러나 거기’이 라인에 대해 다른 것 : 다시 오는 것은 무엇이든 mysql_query 호출되는 변수로 채워집니다 $ 결과 .
그래서’정말 $ 결과 당신이 검사하고 싶다는 것. 테이블 목록이 있어야합니다 테이블 표시 , 아니면’s는 어떤 종류의 오류를보고합니다. 그리고 만약’그렇다면 오류를보고합니다 $ 결과 이기 때문에 거짓입니다 mysql_ 함수는 거기에있을 때 false를 반환합니다’문제입니다.
그래도 잘못된 값을 확인하는 방법을 알고 있으므로이 코드를 추가하여 문제를 처리 할 수 있습니다
if ($ result === false) 주사위("
목록 테이블의 오류 : " . mysql_error () . "
");
>
?>
자, 이것은 작동하지만 그것은 작동합니다’대부분의 PHP 프로그래머가 일을하는 방식이 아닙니다. 그만큼 === PHP에서 사용하는 것이 상당히 특이한 것입니다. 적어도 변수가 False인지 확인하는 것은 적어도. 무엇’더 일반적입니다’일반적으로 PHP에서 수행 - 부 ! . 따라서 변수가 $ davariable 거짓, 당신은 말할 수 있습니다 만약에 (!$ variable) . 그리고 그 ! 같은 말을합니다, “있는지 확인하십시오 $ davariable 거짓입니다.”
더 나은 것이 더 좋습니다 ! 존재로 “~ 아니다.” 그래서 당신이 정말로 당신의 코드에서 말하고 싶은 것은, “만약에 $ 결과가 아닙니다 , 그런 다음 죽습니다.” 따라서 코드를 다시 작성하여 다음과 같이 보일 수 있습니다
만약에 (!$ 결과) 주사위("
목록 테이블의 오류 : " . mysql_error () . "
");> ?>
이런 종류의 코드는 PHP 훨씬 더 나은 것입니다. 이제 당신은’VE 문제가 해결되었습니다.
메모
듣는 것이 이상하게 보일 수 있습니다 “방법’S PHP에서 수행되었습니다.” 코드가 작동하면 작동합니다? 글쎄, 그래… 그러나 당신은 누군가를 들어 본 적이 있습니까?’S는 영어를 배우는 것입니다? 종종 그들의 말은 정확하지만 순서, 사용법 및 관용구는 잘못되었습니다. 왜 둘 이상의 양이 여전히 단지 왜 “양,” 당신은요’아이디어를 얻었습니다.
프로그래밍 언어는 동일합니다. 거기’작동하는 코드 작성’당신이 언어를 아는 것처럼 보이는 코드 쓰기. 때때로 이것은 존재라고합니다 웅변 . 실제로 훌륭한 책이 있습니다 “제대로 말하기” JavaScript에서 Ruby는 전화했습니다 웅변 자바 스크립트 (Marijn Haverbeke; 전분 언론 없음) 및 웅변 루비 (Russ Olsen; Addison Wesley). 그것’S는 작업중 인 PHP를 작성하는 방법뿐만 아니라 자연스럽게 보이는 PHP를 작성하는 가치가 있습니다.
실제로 코드가 오류가 발생하는지 확인하려면 SQL 쿼리를 변경하여 틀린이 있습니다
$ result = mysql_query ( "표시 테이블;");
만약에 (!$ 결과) < die("목록 테이블의 오류 : " . mysql_error () . "
");> ?>
이제로드하십시오 연결하다.HTML 브라우저에서 연결 테스트를 실행하십시오. 그림 4-4는 볼 수있는 것과 유사합니다. 여전히 약간의 암호이지만, 코드가 문제가 있음을 깨달은 경우에는 대규모 붕괴가 아닌 오류 메시지로 처리했습니다.
그림 4-4. 길을 따라 모든 단계를 오류로 처리하십시오. 오류를 더 잘 처리하고 메시지가 더 구체적 일수록 무엇을 더 쉽게 알아낼 수 있습니다’코드에 잘못되었습니다. 즉, 사용자에게 적합한 코드를 의미하며 버그가 자르면 쉽게 수정할 수 있습니다.
SQL 결과를 인쇄합니다
오류가 처리되고 문제가보고되며 이제 마침내 무엇을 처리 할 수 있습니다’실제로 $ 결과 일이 없을 때’잘못하러 가라. 불행히도, 상황이 조금 까다로워집니다. $ 결과 실제로 PHP 유형이 아닙니다’VE를 사용했거나 심지어 당신을 사용했습니다’직접 작업하는 방법을 배워야합니다. 그것’s라고 불리는 것 자원 , 특별한 변수에 대한 php-speak입니다’PHP 이외의 것과 관련된 것.
이것에 대해 생각하십시오 :의 경우 mysql_query , 너’VE는 쿼리 실행으로 SQL 결과를 요청했습니다 테이블 표시 . 그러나 PHP는 MySQL과 대화 할 수 있지만 실제로는’SQL을 해석하는 방법을 알고 있습니다. 그래서 가능합니다’T를 알고 있습니다 $ 결과 행 목록을 보유해야하며 각각은 하나의 값으로 : 테이블 이름. MySQL 데이터베이스 (MySQL 데이터베이스)가 mysql_query 기능. 그리고 그것에 대해 생각하십시오 : 당신이 통과하는 쿼리에 따라 mysql_query, $ result 이름 및 Facebook URL과 같은 여러 정보가있는 행을 보유 할 수도 있고 테이블을 만듭니다 성명서가 효과가 있든 없든.
따라서이 경우 일반적으로 PHP 리소스로 끝납니다. 그 자원은 의미합니다 무엇 ; 그것’그냥 PHP는 그 일입니다’그게 뭔지 정말 알아요. 따라서 PHP에는 도움이 필요합니다. 필요한 것은 MySQL에 대해 알고 작업하는 방법을 알아낼 수있는 것입니다 $ 결과 . 저것’다른 MySQL 기능으로 정확히 얻는 것입니다, mysql_fetch_row . 이 기능을 반환 된 리소스로 전달합니다 mysql_query , SQL 쿼리에서 반환 된 결과에서 각 행을 순환 할 수 있습니다.
여기’기본 패턴 :
- SQL 쿼리를 쓰고 문자열 또는 변수로 저장하십시오.
- 쿼리를 전달하십시오 mysql_query PHP 리소스를 되 찾으십시오.
- 그 자원을 전달하십시오 mysql_fetch_row 결과 행을 다시 얻으려면 한 번에 하나씩.
- 그 행을 순환하고 필요한 정보를 꺼내십시오.
- 모든 현금으로 정말 멋진 기타를 사십시오’다시 만들기.
메모
마지막 단계는 선택 사항이지만 적극 권장됩니다.
너’VE는 자원을 얻었습니다 $ 결과 , 이제 전달하십시오 mysql_fetch_row , 이와 같이:
경고
SQL을 변경 한 경우 표시 테이블 결과가 아닌지 확인하여 오류 처리에 설명 된대로 오류를 생성하려면 Working SQL로 다시 변경하십시오 테이블 표시 .
PHP는 비록’t 반환 된 자원으로 무엇을 해야하는지 알 수 있습니다 mysql_query, mysql_fetch_row 하다. 그것은 당신의 것입니다 $ 결과 자원과 한 번에 하나씩 행을 배열하여 배열로 뱉기 시작합니다.
그리고 거기에’그게 ~하는 동안 루프, 그것은 또한 새롭지 만 이미 당신에게 말이 될 것입니다. ㅏ ~하는 동안 무언가가 사실 인 한 루프는 계속 루프를합니다. 이 경우 루프는 계속 루핑을 유지합니다 $ 행 - SQL 쿼리의 다음 결과는 값을 얻는 것입니다 mysql_fetch_row ($ result) . 더 이상 결과 행이 없을 때, mysql_fetch_row 그렇습니다’t 뭐든지 돌려주십시오 $ 행 비어 있고 ~하는 동안 루프는 말한다, “좋아, 나’M 완료. 나’지금 루핑 중지.”
당신은요’VE는 멋진 변제 목록을 얻었습니다 ( ul ) 각 줄을 뱉을 준비가되어있어’추가 할 수있는 한 가지만 :
이 코드는 다시 친숙해 보이기 시작해야합니다. 매번 mysql_fetch_row 보고 $ 행 , 그것’실제로는 배열을 반환합니다’VE 이전보기 ($ _Request 변수). 해당 배열에는 SQL 쿼리의 다양한 정보가 있습니다. 을 위한 테이블 표시 , 저것’단지 한 가지만 $ 행 [0] : 테이블 이름. 곧, 당신’더 복잡한 쿼리를 작성하면 값을 가져와야 할 수도 있습니다 $ 행 [1] 또는 $ 행 [2] 또는 $ 행 [10] .
이 경우 다시 돌아옵니다 $ 행 , 배열에서 첫 번째 항목을 인덱스 0에서 가져 와서 테이블 이름을 잡은 다음 에코 . 거기’여기에 하나의 다른 주름이 있습니다 : 끈 내부의 곱슬 괄호는 에코로 전달됩니다. 무엇’그것들과 함께?
글쎄, 당신은 다음과 같이이 줄을 다시 쓸 수 있습니다
끈을 함께 붙잡는 모든 추가 인용 자국과 기간을 제외하고는 잘못된 것이 없습니다.
메모
으깬 줄이 함께하는 것을 기억한다면 주요 대단한 점수 (텍스트 결합).
그러나 PHP는 매우 정통하며 언어를 쓴 사람들도 프로그래머이기도합니다. 그들은 당신처럼 당신을 깨달았습니다’끊임없이 끈 중간에 변수를 삭제해야합니다. 따라서 지속적으로 문자열을 끝내고 변수를 추가하는 대신 변수를 < >, 그리고 PHP는 대신 해당 변수의 값을 인쇄합니다 “$ 행 [0]”. 그것은 훨씬 간단한 코드를 만듭니다’좋은 일입니다.
구하다 연결하다.PHP , 재 방문 연결하다.HTML 브라우저에서 어떤 테이블을 확인하십시오’VE는 귀하의 데이터베이스에 들어갔다. 그림 4-5입니다 연결하다.PHP 테이블이 많은 데이터베이스에 대해 실행됩니다. 당신은 단지 한두 가지가있을 수 있습니다’괜찮아. 테이블 목록이 있는지 확인하십시오.
그림 4-5. 쇼 테이블은 브라우저에서 꽤 쓸모없는 것으로 밝혀졌습니다. 이 결과는 수많은 테이블처럼 보일지 모르지만’단일 앱에 20, 30 또는 100 테이블이있는 웹 애플리케이션을 작성할 가능성이 있습니다. 그러나 지금은입니다’S PHP 스크립트가 MySQL 데이터베이스와 대화하고 있는지 확인하는 정말 쉬운 방법입니다.
여러 파일로 코드를 정리합니다
당신이하지 않더라도’T는 아직 깨달았습니다’당신에 대해 문제가있는 것 연결하다.PHP 스크립트. 처음 몇 번의 MySQL 전화를보십시오
mysql_connect ( "당신.데이터 베이스.주인",
"your-username", "your-password")
또는 다이 ( "데이터베이스에 연결하는 오류 : " . mysql_error () . "
"); 에코"
MySQL에 연결되었습니다!
";
mysql_select_db ( "your-database-name")
또는 다이 ( "데이터베이스 선택 BMClaugh : "오류 :" . mysql_error () . "
"); 에코"
Database Bmclaugh를 사용하여 MySQL에 연결되었습니다.
"; // 등등. ?>
너’데이터베이스 호스트, 사용자 이름, 비밀번호 및 데이터베이스 이름을 스크립트에 수동으로 입력하십시오. 이제 10 개의 스크립트가 있다고 가정 해 봅시다’그것을 10 번 입력합니다. 오타의 기회는 꽤 높습니다.
뿐만 아니라 비밀번호를 변경할 때 발생하는 일? 또는 더 나은 호스팅 계획으로 업그레이드하여 앱이 생성하는 모든 웹 트래픽을 처리하고 데이터베이스 호스트를 변경해야합니다? 너’VE는 모든 PHP 스크립트에서 해당 정보를 넣은 모든 장소를 추적해야합니다. 저것’s는 악몽이며 실제로 새로운 코드를 작성하고 더 많은 현금을 만들지 못하게합니다. 안좋다.
당신은 방법이 필요합니다 추상화 그 정보. 추상화는 구현을 숨기는 용어, 구현, 비밀번호와 같은 방식 (비밀번호)이 작동하는 프로그램에서 작동하는 프로그램에서. 당신은 기본적으로 상징이나 이름이 있으며 그 이름은 훨씬 더 자세한 내용을 말합니다. 그리고 그 세부 사항이 변경 되더라도 이름은 여전히 옳은 것을 가리 킵니다.
그것’말처럼 “리,” 그리고 말할 필요없이 아내를 의미합니다, “짧은 금발 머리와 큰 다리를 가진 그 뜨거운 34 세의 여자.” 그리고의 아름다움 “리” 매번 생일은 계속 말할 수 있습니다, “리,” 설명을 변경하는 대신.
수동형 값을 변수로 대체합니다
그래서 당신이 당신의 코드가 이것처럼 보이기를 원한다고 가정합니다 (실제로, 당신은 정말로 하다 이것처럼 보이기를 원합니다) :
mysql_connect ($ database_host, $ username, $ password)
또는 다이 ( "데이터베이스에 연결하는 오류 : " . mysql_error () . "
"); 에코"
MySQL에 연결되었습니다!
";
mysql_select_db ($ database_name)
또는 다이 ( "데이터베이스 선택 BMClaugh : "오류 :" . mysql_error () . "
"); 에코"
Database Bmclaugh를 사용하여 MySQL에 연결되었습니다.
"; // 등등. ?>
당신들 모두’RE Doing은 사용자 이름 또는 데이터베이스 이름을 핸드 타이핑하는 대신 변수처럼 보이는 것을 쓰는 것입니다. 이제 연결 코드 위로 해당 변수를 정의 할 수 있습니다
$ database_host = "귀하의.데이터 베이스.주인";
$ username = "your-username";
$ password = "your-password";
$ database_name = "your-database-name";
// 데이터베이스 연결 코드 ?>
그러나 이것은 정말 훨씬 낫습니다? 아직 아님; 너’VE는 여전히 이와 동일한 값을 스크립트에 수작업으로 만들었습니다. 파일에 값을 붙이고 싶어서 사람이 파일을 입력 할 필요가 없습니다. 읽어.
중요한 값을 별도의 파일로 추상화합니다
당신의 목표는 이러한 가치를 얻는 것입니다 연결하다.PHP , 모든 PHP 스크립트가 귀하에게서 입력하지 않고 액세스 할 수있는 곳으로. 새 파일을 열고 전화하십시오 app_config.PHP . 이제 변수를이 새 파일로 삭제하십시오
메모
확실하고 저장하십시오 app_config.PHP 모든 응용 프로그램에 적합한 곳’액세스 할 수있는 스크립트. 이 책에서’s 예제, app_config.PHP 아래 사이트의 루트에 있습니다 스크립트/ . 그래서 당신이’다시 CH04/스크립트/ 디렉토리, 당신’D이 파일에 액세스하십시오 ../../스크립트/APP_CONFIG.PHP , 또는 [site_root]/스크립트/APP_CONFIG.PHP . PHP 스크립트에서 제대로 경로를 얻는 한 원하는 곳에 파일을 저장할 수 있습니다.
응용 프로그램의 프로덕션 버전으로 이동하면이 파일을 사이트 루트 외부에 배치하고 싶을 것입니다. 그렇게하면 웹 사용자가 할 수 있습니다’t 구성 스크립트의 경로를 입력하고 모든 암호를 얻으십시오. 또는이 디렉토리에 보안을 추가 할 수는 있지만 웹 사이트 디렉토리에서 완전히 가져 오는 것은 일반적으로 가장 쉽습니다.
이제 다른 PHP 스크립트가 이러한 공유 변수를 사용하도록 할 수 있습니다. 여기에서 변수를 변경하십시오 app_config.PHP , 그리고 그 변화는 이러한 공유 변수를 사용하는 모든 PHP 스크립트에 영향을 미칩니다.
그러나 실제로 이러한 변수에 어떻게 액세스합니까?? 돌아가십시오 연결하다.PHP , 이 변수를 직접 정의한 곳을 제거하십시오. 당신이 시도하고 접근한다면 연결하다.PHP ~을 통해 연결하다.HTML 하지만 이제 당신’그림 4-6을 참조하십시오.
그림 4-6. APP_CONFIG에서 변수를 정의했습니다. PHP이지만 연결하십시오.PHP는 그렇습니다’이것을 알고 있습니다. 연결 스크립트를 말해야합니다’t app_config를로드 할 때까지 실행하십시오.PHP. 변수가 연결되어 있으므로 상황이 작동합니다.PHP 용도가 올바르게 설정됩니다.
오류가 발생합니다 연결하다.PHP 이제 무엇을 모릅니다 $ 사용자 이름 또는 $ 비밀번호 ~을 참고하여. PHP가 무엇이든하기 전에 연결하다.PHP , 그것’로드하는 데 필요한 s app_config.PHP . 그리고 그’S (거의) 스크립트에 입력 한 내용 :
필요하다 '../../스크립트/APP_CONFIG.PHP ';
// 데이터베이스 연결 코드 ?>
이제 PHP가 파일을로드합니다 ../../스크립트/APP_CONFIG.전에 PHP 그것은 당신의 실행됩니다 mysql_connect 기능. 사실상, 필요하다 말한다, “Hey PHP, 가능하다면’t 파일을로드 i’m주고, 불쾌한 오류를 던지십시오. 다른 것이 작동하지 않기 때문입니다.”
경고
당신이주는 길과 파일 이름을 확인하십시오 필요하다 당신이 실제로 넣는 곳에 일치합니다 app_config.PHP , 아니면 당신’LL 오류를 참조하십시오 필요하다 밀접하고 개인적으로 생산됩니다.
연결 스크립트를 다시 시도하고 실행하면 테이블 목록이 표시됩니다. 즉, 상황이 다시 잘 작동한다는 의미입니다.
후드 아래 : 요구 또는 포함?
거기’PHP의 또 다른 명령’S와 매우 유사합니다 필요하다 : 포함하다. 포함하다 정확히 무엇을합니다 필요하다 PHP에게 다른 파일을로드하도록 지시하는 측면에서. 차이점은 해당 파일이 가능하다면’로드됩니다, 포함하다 경고를 발행하고 PHP가 스크립트에서 이후 명령을 계속 실행하게합니다. 다시 말해서, 필요하다 사물을 완전히 닫습니다 포함하다 스크립트가 계속 진행되도록하십시오.
하지만 여기는’일. 당신은 정말 당신이하지 않으면 파일을 포함 시키려고 귀찮게 할 것입니다’그 파일이 필요합니다? 대부분의 경우 아마도 그렇지 않을 것입니다. 당신은요’필요하기 때문에 해당 파일을 포함합니다. 너 필요하다 실행할 파일. 따라서 거의 모든 상황에서 사용해야합니다 필요하다 다른 파일을 가져 오기 위해 포함하다 . 뭔가 잘못되면 그것에 대해 알고 싶어. 당신은 돈입니다’나머지 코드가 실행되기를 원합니다’어쨌든 아마도 오류가 발생할 것입니다.
변수는 다양하지만 상수는 일정하게 유지됩니다
거기’코드에 대한 작은 문제를 한 번 더 잔소리합니다’데이터베이스 호스트 및 데이터베이스 이름과 함께 사용자 이름 및 비밀번호에 변수를 사용하고 있습니다. 그리고 뭐’변수입니다? 다양하거나 변화하는 것. 따라서 PHP는 행복하게 다음 코드를 작성할 수 있습니다 연결하다.PHP :
mysql_connect ($ database_host, $ username, $ password) 또는 die ( "데이터베이스에 연결하는 오류 : " . mysql_error () . "
"); // 이것은 허용되지만 일부 나쁜 모조 $ password ="hijinks ";
따라서 다른 스크립트가 필요할 때 어떻게됩니까? app_config.PHP - 연결해야합니다 mysql_connect ? 그것’s를 사용할 것입니다 $ 비밀번호 , 그러나 지금 $ 비밀번호 ISN’t 더 이상 맞습니다. 그것’s로 설정되었습니다 “hijinks,” 그리고 혼란이 계속 될 것입니다.
당신이 정말로 원하는 것은 그 가치에 대한 것입니다 app_config.PHP 일정하고 결코 변하지 않습니다. 당신은 특별한 사람으로 이것을 할 수 있습니다 정의하다 기능. 열어 app_config.PHP 코드 변경 :
정의 ( "database_host", "Your.데이터 베이스.주인");
define ( "database_username", "your-username");
define ( "database_password", "your-password");
define ( "database_name", "your-database-name");
?>
당신은 상수의 이름과 그 상수의 값을 정의하고 PHP는 새로운 상수를 만듭니다. 그렇게하면 입력 할 수 있습니다 database_host 코드와 php 정말 봅니다 “당신의.데이터 베이스.주인”. 완벽한! 그리고 이것은 일정하기 때문에 가능합니다’라인을 따라 어디서나 변경됩니다.
상수는 모든 uppercase 문자로 입력됩니다. 캡 경기장’T 필요하지만’그 중 하나입니다 “PHP 프로그래머처럼 말하십시오” 것들. 상수가 변수와 다르게 보이기를 원하며 모든 대문자 이름을 사용하는 한 가지 방법은. 상수도 돈도 있습니다’t가있다 $ 변수와 상수를 차별화하는 또 다른 방법 인 이름보다.
이제 몇 가지 빠른 변경을해야합니다 연결하다.PHP 이 새로운 자본화 된 상수 이름을 사용하려면 :
mysql_connect (database_host, database_username, database_password)
또는 다이 ( "데이터베이스에 연결하는 오류 : " . mysql_error () . "
"); 에코"
MySQL에 연결되었습니다!
";
mysql_select_db (database_name)
또는 다이 ( "데이터베이스 선택 오류 ""
. 데이터베이스 이름 .
mysql_error () . "");
에코 "
데이터베이스를 사용하여 MySQL에 연결 . 데이터베이스 이름 . "
"; // SQL 쿼리 러닝 혜성이 진행됩니다. ?>
경고
당신은 할 수 있습니다’t 사용 상수를 인쇄하기위한 따옴표 내부. 그것’s 변수를 둘러싼 경우에만 ( $ ) 와 함께 그 PHP는 해당 변수의 값을 인쇄합니다. 대신, 문자열을 끝내는 정상 문자열 연결 접근법을 사용하고 점을 사용하여 상수를 추가하십시오 (.), 텍스트 결합에 대해 논의 된 바와 같이.
노력하다 연결하다.PHP 다시. 당신은 완벽하게 좋은 테이블 이름 목록을 받아야합니다. 그러나 이번에는, 당신’VE는 당신의 중요한 정보에 대한 상수를 얻었고, 연결하다.PHP .
메모
그것’s는 또한 몇 가지 추가 보안을 추가하는 것이 좋습니다 app_config.PHP , 암호와 같은 특수 값이 포함 된 다른 스크립트. 파일의 권한을보다 제한적으로 설정하거나 PHP 스크립트에 액세스 할 수있는 곳으로 파일을 이동할 수 있지만 웹 사용자는 할 수 있습니다’티. 웹 또는 서버 관리자에게 도움을 요청하십시오’어떻게 해야할지 모르겠습니다.
디자인 시간 : 작게 시작하고 작게 추가하고 작게 마무리합니다
왜 당신이 할 수 있는지 궁금 할 것입니다’T는 방금 시작했습니다 app_config.PHP , 완성 된 작업 버전의 연결하다.PHP . 또는 최소한 모든 데이터베이스 연결 코드를 연결하다.PHP 한 번에 인쇄 코드를 한 번에 수행했습니다. ISN’실제 개발자가 코드를 작성하는 방식?
음, 그렇습니다. 많은 개발자들이 그런 코드를 작성합니다. 스크립트에 10 또는 20 또는 50 줄의 코드를 입력 한 다음 시도해보십시오. 개발자가 너무 빨리 입력하고 실수를 저지르기 때문에 많은 것들이 깨질 것입니다. 그러나 그들은 그들입니다’ll 각 문제를 하나씩 고정하십시오. 그리고 많은 개발자들에게’괜찮아.
하지만 여기는’S THING : 그’매우 효율적인 작업 방식이 아닙니다. 게다가, 당신’RE는 일반적으로 테이블 인쇄와 같은 마지막 단계에 중점을 두므로 중간 단계를 처리하는 가장 좋은 방법을 알아내는 데 많은 시간을 소비하지 않을 수 있습니다. 당신은 사용하지 않을 수 있습니다 인쇄 된 진술을 단순화합니다 $ 행 [0] , 아니면 건너 뛸 수 있습니다 주사위 당신 때문에’HTML 출력에 대한 RE 생각, 데이터베이스 암호가있는 경우를 처리하지 않음’맞습니다.
최고의 개발자는 한 번에 정말 작은 코드 덩어리를 사용합니다. 그들은 그 코드를 테스트 한 다음 다른 것으로 이동합니다. 사실 - 이것은이 책을 넘어서서 조금’여전히 중요합니다. 실제로 많은 엘리트 개발자가 실제로 테스트를 작성합니다 ~ 전에 그들은 다른 것을 씁니다. 그들은 그 테스트를 작성하고 테스트는 분명히 실패합니다’t 모든 코드를 작성했습니다. 그런 다음 테스트를 통과하기에 충분한 코드 만 작성 한 다음 다른 테스트를 작성합니다.
이 방법은 처음에는 그다지 의미가 없습니다. 왜 코드에 대한 테스트를 작성 하는가’t 존재합니다? 여기’s 뭐’S Reall Nuts : 종종이 접근 방식은 실제 애플리케이션 코드보다 더 많은 테스트 코드를 초래합니다! 그것’많은 일을하고 있습니다’s는 한 번에 한 가지 일을 얻기에 충분한 코드 만 작성해야한다는 생각에 기초하여.
하지만 여기는’S 큰 공개 및 이러한 엘리트 개발자가 엘리트 인 이유 :이 테스트 우선 접근 방식은 더 나은 코드를 만듭니다. 작게 일하고 처음부터 끝까지 일하는 것은 당신을 의미합니다’한 가지에 집중하고 그 일을 정말 잘하는. 당신은 아야합니다’T 다른 무언가로 돌진합니다. 그리고 그것은 당신이 무엇을 의미합니다’RE 작업은 견고하고 작동합니다. 이 접근법은 처음에는 더 많은 시간이 걸리지 만, 자주 덜 자주 끊어지는 암석 코드가 발생합니다.
그러니 시간을내어 작게 일하십시오. 코드가 더 나아질 것이고 고객은 코드가 여전히 실행 중이기 때문에 고객이 귀하를 사랑할 것입니다’휴대 전화에서 깨진 앱에 대한 도움을 받으려고 “다른 사람들.”
기본 SQL 쿼리 러너 구축
이제 SQL에 연결할 수 있습니다’더 야심 찬 무언가를 취할 준비 준비 : MySQL 명령 줄 도구의 자신만의 버전 구축. 물론, 당신’지금 PHP 개발자이자 프로그래머, 따라서 정신적으로 긁으십시오 “명령 줄” 그리고 그것을 대체하십시오 “웹 기반.”
당신이 밝혀졌습니다’VE는 이미 필요한 대부분의 도구를 가지고 있습니다. 귀하와 사용자가 SQL 쿼리를 입력 할 수있는 HTML 양식을 쉽게 구축 할 수 있으며 MySQL에 연결하고 데이터베이스를 선택하는 방법을 알고 쿼리를 실행할 수 있습니다. 모든’s 왼쪽은 그 PHP 자원을 해석하는 방법을 알아내는 것입니다 mysql_query 그것이되면 돌아옵니다’테이블 이름 목록이 아닙니다.
큰 빈 상자로 HTML 양식을 작성합니다
도착하기 전에 mysql_query 그러나 그 결과는 당신이 아는 것부터 시작합니다 : HTML 형식. 지금은 간단하게 유지하고 쿼리를 입력 할 수있는 단일 텍스트 영역과 몇 가지 기본 버튼이있는 양식을 만듭니다.
텍스트 편집기를 열고 작성하십시오 쿼리 러너.HTML:
PHP & MYSQL : 누락 된 매뉴얼
예 4-2SQL 쿼리 러너
아래 상자에 SQL 쿼리를 입력하십시오
좋아하는 브라우저를 발사하고 그림 4-7처럼 보이는지 확인하십시오.
그림 4-7. 누가 당신이 할 것이라고 말한 적이 있습니다’t 본격적인 웹 프로그래머가되었을 때 HTML과 CSS를 쓰는 데 많은 시간을 소비합니다? 기본 SQL 쿼리 러너를 사용하더라도 좋은 구조와 스타일은 프레젠테이션에 큰 차이를 만듭니다.
데이터베이스에 연결 (다시)
당신은 무엇을 알고 있습니다’다음 : MySQL에 연결 한 다음 사용 데이터베이스. 이 코드는 지금까지 매우 친숙해야합니다. 열어 run_query.PHP 그리고 일하러 가세요 :
데이터베이스에 연결하는 오류 : " . mysql_error () . ""); 에코"MySQL에 연결되었습니다!
"; mysql_select_db (database_name) 또는 다이 ("
데이터베이스 선택 오류 "" . 데이터베이스 이름 . mysql_error () . "
"); 에코"
데이터베이스를 사용하여 MySQL에 연결 . 데이터베이스 이름 . "
"; ?>
하지만 기다려… ~이다 친숙한. 너’Ve는 이전 에이 코드를 작성하여 사용할 데이터베이스를 선택하여 MySQL에 연결할 때마다 작성해야합니다. 그런 종류의 복제는입니다’T 좋아요. 저것’데이터베이스 상수를 이동 한 이유 app_config.PHP : 당신은 10 개 또는 백 장소가 아닌 단일 장소에서 항상 같은 코드를 유지할 수 있기를 원했습니다.
너’그것이 얼마나 쉬운 지 보았습니다 필요하다 파일 (중요한 값을 별도의 파일로 추출)하고 일정한 값을 가져옵니다. 데이터베이스 연결 코드로 동일한 작업을 수행 할 수 있습니다. 새 파일을 열고 전화하십시오 Database_Connection.PHP . 이 새 스크립트를 바로 저장하십시오 app_config.PHP , 다음 코드를 입력하십시오
데이터베이스에 연결하는 오류 : " . mysql_error () . ""); 에코"MySQL에 연결되었습니다!
"; mysql_select_db (database_name) 또는 다이 ("
데이터베이스 선택 오류 "" . 데이터베이스 이름 . mysql_error () . "
"); 에코"
데이터베이스를 사용하여 MySQL에 연결 . 데이터베이스 이름 . ".
"; ?>
메모
당신의 길을 확인하십시오 app_config.PHP 해당 파일을 저장 한 곳에서 일치합니다. 만약 너라면’저축 Data-Base_Connection.PHP 같은 디렉토리에서 app_config.PHP , 디렉토리 경로없이 파일 이름 만 있으면됩니다.
이제 당신’VE는 모든 데이터베이스 코드를 멋지게 자리 잡았으므로 근본적으로 점검 할 수 있습니다 run_query.PHP :
어떻게’짧은 코드의 경우? 또한 더 이상 필요로 할 이유가 없습니다 app_config.PHP . 스크립트가 필요합니다 Database_Connection.PHP , 그리고 그것’에스 Data-Base_Connection.PHP 그것은 가져 오는 것을 처리합니다 app_config.PHP . 당신의 코드는 이제 훨씬 더 좋고 깔끔합니다.
이 효과가 있는지 확인하려면 쿼리 러너.HTML 페이지를 클릭하고 쿼리 실행을 클릭하십시오. 그림 4-8과 같은 것을 얻어야합니다 필요하다 메인 스크립트에서!
그림 4-8. (적어도 지금까지) 다른 스크립트를 요구하는 스크립트를 작성하는 것은 이상하게 보일 수 있습니다. 사실, 코딩이 더 편리할수록 더 많이’이런 종류의 재사용을 선호합니다. 작업을 완료하기에 충분한 새 코드를 작성하고 싶습니다. 기존 코드의 100 행 또는 1,000 줄을 재사용 할 수 있다면.
사용자 실행’S SQL 쿼리 (다시)
이 시점에서 마침내 PHP에 대해 알고있는 것과 SQL에 대해 알고있는 것을 결합하게됩니다. 당신은 이미 사용자가 당신의 형태로 큰 텍스트 영역에 넣는 것을 $ 요청 당신이 기억하는대로 배열 ($ _request 변수)입니다. 그리고 당신은 또한 사용할 수 있습니다 mysql_query 쿼리를 실행합니다.
당신은 그 두 가지를 함께 넣어야합니다
HTML 양식에서 입력에서 적절한 필드를 잡고 전달하십시오 mysql_query , 당신은요’갈 수 있습니다. 그런 다음 반환 된 PHP 리소스를 통과 할 수 있습니다, $ 결과 , 오류 처리에 만약에 진술, 그리고 마지막으로 mysql_fetch_row 쿼리에서 결과를 인쇄합니다.
자주 묻는 질문 : MySQL_Query 기능을 추상화하지 않는 이유?
동일한 사용자 이름과 비밀번호로 MySQL에 지속적으로 연결하고 동일한 데이터베이스를 선택하는 것과 같은 데이터베이스를 반복해서’전화를 걸어 mysql_query , 계속해서. 그렇다면 다른 파일에 배치하지 말고 파일이 필요합니다?
그 이유는 사용자 실행에 쓴 코드에 있습니다’S SQL 쿼리 (다시) : 전달한 것 mysql_query 당신이 그것을 부를 때마다 거의 변할 것입니다. 예를 들어, 연결하다.PHP (MySQL 데이터베이스에 연결) 쿼리를 전달했습니다 테이블 표시 그것에; 이제 당신’양식 필드에서 쿼리를 전달하십시오 쿼리 러너.HTML. 당신은’호출 mysql_query 반복해서, 당신이’그 기능을 제공하는 것은 변화하고 있습니다’s 메인 스크립트에서 해당 기능을 철수하는 데 도움이되지 않습니다.
당신은 움직일 수 있습니다 mysql_query 메인 스크립트에서 계속해서 전달하는 진술의 일부 - SQL 쿼리. 너’d 기본 스크립트와 쿼리에서 쿼리를 취하는 사용자 정의 기능을 작성해야합니다 mysql_query . 그럼 언제 mysql_query 실행이 완료되면 사용자 정의 기능은 메인 스크립트로 반환 한 모든 것을 전달해야합니다.
그것은 입처럼 들릴 수 있고 많은 일. 그것’그래도 실제로는 매우 쉽고 일단 자신의 기능을 작성하기 시작하면’8 장에서하고 있습니다’D에 문제가 없습니다. 그러나 당신은 무엇을 얻을 것인가? 너’D 여전히 쿼리를 전달하고 응답을 되 찾아야합니다. 너’d 실제로 자신의 기능을 구축함으로써 아무것도 얻지 못합니다. 기본적으로 대체됩니다 mysql_query , 그러나 당신은 할 것입니다’추가 기능을 얻을 수 있습니다’t 코드에 변경 사항이나 그와 비슷한 것들로부터 보호를 추가하십시오.
자, 당신이 생각하기 전에 당신은해야합니다’이런 종류의 일에 대해 걱정, 잠시 시간을 내십시오. 생각, “이 코드를 다른 일반 파일로 가져올 수 있습니까?? 이것을 사용자 정의 함수로 만들어야합니다?” 아주 좋은 것입니다! 당신은 그렇게 생각하고 싶어합니다’에스 ~ 아니다 좋은것. 새로운 아이디어와 코드에 접근 할 수있는 방법을 더 많이 펼칠수록 프로그래머가 더 좋습니다’ll. 그러니 이러한 질문을 계속해서 물어보십시오. 그냥 돈’T 자신의 질문에 대답하는 것을 두려워하십시오, “아니요’그렇게 좋은 아이디어는 아닙니다 이것 사례.”
대본은 꽤 좋아 보이므로 이제 당신입니다’실제로 시도해 볼 준비가되었습니다.
첫 번째 웹 기반 쿼리를 입력합니다
당신은 아마 돈을하지 않을 것입니다’이 시점에서 데이터베이스에 많은 것이 있으므로 새 테이블을 만들어 시작하십시오 URL . 여기’sql 당신’필요하지 않음 :
테이블 URL을 작성하십시오 (ID int, URL Varchar (100), 설명 varchar (100));
물론, 당신이기 때문에’VE는 멋진 큰 텍스트 영역을 얻었습니다
테이블 URL 생성 (ID int, URL Varchar (100), 설명 varchar (100))
어느 쪽이든, 당신은 그림 4-9와 같은 모습을 원합니다.
그림 4-9. 여기에서 TextArea를 사용하면 사용자가 SQL을 입력 할 수 있지만 좋아합니다. 그것’작은 일이지만 유연성과 사용자 중심 디자인의 작은 부분은 웹 양식을 사용하기에 훨씬 더 즐겁게 만듭니다. 당신은 할 것입니다’t 한 줄에 거대한 입력 상자에 큰 긴 SQL 문을 쓰고 싶으므로 사용자가 왜 사용자가?
이제 실행 쿼리를 클릭하십시오. 당신은 무엇을 얻었습니까?? 당신을 잘’아마도 놀라운 화면을 쳐다 보면 그림 4-10에 표시된 것과 비슷합니다.
그림 4-10. 때로는 최악의 오류 메시지가 오류 메시지가 아닙니다. 여기에 아무것도 스크립트에 무엇이 잘못되었는지 알 수 없습니다. 이런 경우 오류 메시지가 도움이되고 좌절감을 느끼지 않습니다.
글쎄, 무슨 일이 있었는지? 실제로 혼란스러워하고 싶다면 브라우저의 뒤로 버튼을 클릭하고 실행합니다 만들다 다시 쿼리. 너’ll 그림 4-11에 표시된 것과 같은 메시지를 참조하십시오.
그림 4-11. 첫째, 당신은 아무것도 없었고 이제는 오류가. 무엇’진행되고 있습니다? 더 나쁜 것은, 당신이 오류가 있다는 것을 알고 있지만 실제 문제는 무엇입니까?? 거기’여기서해야 할 일이 여전히 많습니다.
당신이 처음으로 달렸을 때 테이블을 만듭니다 Create로 테이블 만들기에 대한 쿼리, 당신은 아무것도 얻지 못했습니다. 다음에 MySQL은 다음을 알려줍니다 URL 테이블은 이미 존재합니다! 사실, 당신이 당신의 명령 줄 도구를 타면, 당신은 하다 데이터베이스에 존재합니다
mysql> 설명 URL을 설명합니다. +------------+-----------------------+-----+--------+-------+| 필드 | 유형 | 널 | 키 | 기본값 | 추가 | +------------+-----------------------+-----+--------+-------+| id | int (11) | 예 | | 널 | | | url | 바르 차 (100) | 예 | | 널 | | | 설명 | 바르 차 (100) | 예 | | 널 | | +------------+--------------+------+-----+--------+-------+3 행 (0.00 초)
코드를 다시 한 번 살펴보십시오
그만큼 만약에 (!$ 결과) 코드 블록이 실행되지 않습니다 $ 결과 거짓이 아닌 다른 것으로 돌아 왔습니다. 하지만 ~하는 동안 루프는 결코 실행되지 않았습니다. 당신은 어떤 결과도 본 적이 없습니다.
하지만 잠깐만 요. 귀하의 쿼리는 a 만들다 질문. 그런 종류의 쿼리에서 어떤 행이 반환됩니까?? 거기있을 것입니다’당신이 원하기 때문에 줄이 되십시오’줄을 요구합니다. 당신은 단지 MySQL에게 테이블을 만들도록 요청하고있었습니다. 사실, 장소 놓다 줄.
돈을 다루는 쿼리’t 선택 정보
여기서 비밀은 그게입니다 mysql_query a 만들다 성명. 그것은 심지어 당신이 요청한 것을 수행합니다. 두 번째로 쿼리를 입력 한 MySQL은 당신에게 오류를 주었고 URL 테이블이 이미 생성되었습니다. 언제 mysql_query 작성 명세서를 얻으면 반환됩니다 거짓 스크립트를 처리하는 오류가 있으면’오류가 아닙니다. 그리고 거기 있다면’오류가 아닙니다, 그것은 그렇습니다’t 행을 반환합니다 . 당신은 얻습니다 진실 가치 $ 결과 , 그러나 다른 것은 없습니다. 그리고 그’일이 잘못된 곳.
언제 mysql_query Don이있는 대부분의 SQL 문을 얻습니다’t 생성, 삽입, 업데이트, 삭제, 드롭 등과 같은 데이터를 선택하면 돌아옵니다 진실 (일이 효과가있는 경우) 또는 거짓 (그들이하지 않았다면’티).
메모
그 SQL 명령 중 일부는 같은 것입니다 업데이트 그리고 삭제 , 당신에게 새롭게 보일 수 있습니다. 두목’그래도 걱정. 그들은 자신이하는 것처럼 보이는 방식을 수행합니다 업데이트 테이블의 정보를 업데이트하고 삭제 제거합니다. 이 책에서 그 기능을 사용해야 할 때’그들 각각을 사용하는 방법에 대해 훨씬 더 자세히 설명하십시오.
다행히도, 이제 당신은 무엇을 알았습니다’계속 진행되고 있습니다’문제를 다루기가 어렵지 않습니다. 사용자가 제공 한 SQL 쿼리 문자열 에이 특별한 단어 중 하나가 있는지 여부를 찾으려면 스크립트 만 있으면됩니다. 그렇다면 다르게 처리해야합니다. 그리고 그것은 단지 당신이 일어납니다’문자열을 검색하는 데 편안합니다.
그러니 이것을 통해 생각하십시오. 당신이 정말로 원하는 것은 다음과 같습니다
- 사용자를 잡으십시오’html 양식의 쿼리.
- 쿼리를 전달하십시오 mysql_query , 결과를 변수에 저장하십시오.
- 결과가 거짓인지 결정하십시오.
- 결과가 거짓이 아닌 경우 쿼리에 특수 키워드 중 하나가 있는지 확인. (다른 사람들이 있지만 이들은 가장 일반적인 것입니다.))
- 쿼리 에이 특별한 단어 중 하나가 있으면 쿼리 실행 결과가 사실인지 확인하고 사용자에게 상황이 잘 됐다는 것을 알리십시오.
- 쿼리 에이 단어 중 하나가 없으면 결과 행을 시도하고 인쇄하십시오’이미하고 있습니다.
너’VE는 이미이 코드를 많이 가지고 있으므로 추가하면됩니다 만약에 (또는 아마도 몇 가지 만약에 s, 실제로) 및 일부 검색 :
$ return_rows = false; $ location = strpos ($ query_text, "create"); if ($ location === false) < $location = strpos($query_text, "INSERT"); if ($location === false) < $location = strpos($query_text, "UPDATE"); if ($location === false) < $location = strpos($query_text, "DELETE"); if ($location === false) < $location = strpos($query_text, "DROP"); if ($location === false) < // If we got here, it's not a CREATE, INSERT, UPDATE, // DELETE, or DROP query. It should return rows. $return_rows = true; >>>>>
경고
그 트리플 equals 표시를 사용하십시오 ( === ) 당신의 만약에 여부를 확인하는 진술 $ 위치 ~이다 거짓 .
이 코드는 까다로워 보일 수 있습니다’라인별로 걸어 다니면 간단합니다. 기본적으로, 당신은 동일합니다 만약에 반복적으로 반복되는 진술, 각각은 다른 중첩이있는 사람들과 함께 만약에 성명:
$ location = strpos ($ query_text, "search_string"); if ($ location === false) < // Try again with another SEARCH_STRING >
마지막으로, 모든 경우 만약에 진술이 실패하고 당신은하지 않습니다’t가 있습니다 생성, 삽입, 업데이트, 삭제 , 또는 떨어지다 쿼리 문자열의 어느 곳에서나 :
// 이것은 가장 내면의 if 문입니다 if ($ location === false) < // If we got here, it's not a CREATE, INSERT, UPDATE, // DELETE, or DROP query. It should return rows. $return_rows = true; >
그러나 왜 이것이 그렇게 복잡한가? 여기서 문제는 실제로 사용자를 검색하고 싶다는 것입니다’s 쿼리 문자열, 단일 일치하는 단어뿐만 아니라 만들다 또는 끼워 넣다 , 그러나 몇 가지 일치하는 단어의 경우. 저것’조금 까다 롭습니다’VE는 한 번의 전화로 일해야했습니다 Strpos 한 번에.
메모
이 코드를 이해해야합니다’그것에 너무 붙어 있습니다. 그것’정말 못 생겼고 다음 장에서는’PHP 프로그래밍 키트에 매우 새로운 도구를 추가 하고이 코드를 재 작업 할 예정입니다 많은 더 얇고 매끄럽다.
각 단계에서 검색 문자열이 발견되면 사용자는 다음과 같은 특수 SQL 키워드 중 하나를 넣었습니다’t는 행을 반환하므로 변수입니다 $ return_rows 설정되었습니다 거짓 , 원래 가치와 다릅니다, 진실 .
마지막으로,이 곱슬 모양의 사랑 축제의 끝에서 만약에 진술은 메인 프로그램으로 돌아가고 $ returns_rows 값이 있습니다 진실 검색이 일치하지 않기 때문에 또는 거짓 그들 중 하나가했기 때문입니다.
이제 당신’다시 사용할 준비가되었습니다 $ returns_rows 결과를 인쇄하려면 :
메모
기억 if ($ return_rows) 동일합니다 if ($ return_rows === true) . 마찬가지입니다 if ($ result) .
이 스크립트의 대부분은 익숙합니다. 모든 코드’VE는 행을 인쇄하는 데 사용했습니다. 그 코드는 단지 내부에서 움직입니다 if ($ return_rows) 블록, 사용자가 선택하다 그것은 많은 결과를 (잠재적으로) 반환합니다.
그런 다음 또 다른 그것에 만약에 , 당신의 스크립트는 일이 정상인지 여부를보고합니다. 추가 도움 으로이 섹션 의이 섹션 만약에 사용자가 실행 된 내용을 알 수 있도록 원래 쿼리를 인쇄합니다.
이제 기술적으로, 당신은하지 않습니다’정말 필요합니다 if ($ result) . 이전에 테스트했기 때문에 $ 결과 거짓, 스크립트 가이 마지막 비트에 도달하면 $ 결과 ~이다 진실 , 따라서 결국에는 물건을 조금 단순화 할 수 있습니다
이 스크립트는 조금 길어지고 있지만이 시점에서 모든 단일 라인이 무엇을하고 있는지 알고 있습니다. 계속해서 시도해보십시오.
당신은 아마 URL 테이블 (첫 번째 웹 기반 쿼리 입력)-심지어 PHP 스크립트가했지만’당신에게 그것을 알려주세요. 그러니 들어가십시오 삭제 테이블 URL ; SQL 쿼리로. 그런 다음 쿼리를 실행하면 이번에는 그림 4-12에서 볼 수 있듯이 Rowless Query와 관련하여 유용한 메시지를 되 찾아야합니다.
인간을 다루는 것
불행히도, 거기’이전 섹션의 코드의 줄 중 하나에 여전히 문제가 있습니다. 현재 사용자가 다음 쿼리를 입력하면 어떻게됩니다?
드롭 테이블 URL;
당신의 세트 만약에 진술은 그것을 이해합니다 떨어지다 쿼리의 일부이며, 반환 행이 없다는 것을 인식하고 올바른 일을합니다. 쿼리가 문제없이 실행되었거나 오류가 발생했다고보고합니다.
그림 4-12. 이제 run_query.119 페이지에 표시된 것처럼 PHP는’S는’t 모든 반환 행. 일이 잘되는 메시지는 여전히 약간 간결하지만 적어도 거기에’s가있을 때 결과 행을 보여 주려고 시도한 빈 공간이 없습니다’t 보여줄 결과 행.
그러나이 쿼리는 어떻습니까?? 문제가 어디에 있는지 알 수 있습니까??
드롭 테이블 URL;
여기’s 일치를 나타내는 진술 :
$ location = strpos ($ query_text, "drop"); if ($ location === false) < // this should return true, and so there are no return rows >
그러나 그 라인은 검색합니다 떨어지다 , 그 일은’T 일치 “떨어지다” 조금도. Strpos 문자열을 검색하지만 다음과 같이 소문자가 보입니다 “디”, 대문자와 다른 편지로 “디”. 검색이 찾을 수 있습니다 “떨어지다” 하지만 “떨어지다” 또는 “떨어지다”.
그리고 언제나처럼, 당신’VE는 로봇이 아닌 앱을 사용하여 인간을 얻었습니다. 당신은 할 수 있습니다’t 그 인간이 좋은 SQL 시민이 될 것이라고 가정하고 항상 대문자를 사용한다고 가정합니다. 양식에 약간의 메시지를 넣을 수 있습니다 모든 대문자로 SQL을 입력하십시오 , 그러나 인간은 인간이 될 것이며 이와 같은 지시를 무시하는 경향이 있습니다.
너’지출 적어도 소위 정상적인 작동 흐름을 처리하는 코드 작성 코드로 코드의 인적 요소를 다루는 시간의 많은 시간만큼. 사실, 당신이 당신의 사고 라인에 실제 사람들을 추가하면, 당신은’그것을 깨닫지 못한다 “정상” ISN’t 매우 유용한 개념입니다. 대신, 귀하의 코드는 단순히 상상할 수있는만큼 많은 가능성을 처리해야합니다’티).
소문자 및 대문자 문제를 고치는 것은 상당히 간단한 것으로 판명됩니다. 간단히 변환 할 수 있습니다 $ query_string 검색을 시작하기 전에 모든 대문자에게 :
$ return_rows = false; $ query_text = strtoupper ($ query_text);
$ location = strpos ($ query_text, "create"); // 모든 중첩 된 if 블록.
이제 사용자가 유형되는 경우 삭제 테이블 URL 또는 삭제 테이블 URL , 검색 문자열이 있습니다 삭제 테이블 URL , 그리고 검색 “떨어지다” 경기를 반환합니다.
그러나 거기’또 다른 문제! 읽기 전에, 그것이 무엇인지 알아낼 수 있는지 확인하십시오.
메모
예, 단 하나의 간단한 프로그램에 대한 많은 주름과 문제가 있습니다. 저것’S 프로그래머가 많지만 정말 훌륭한 프로그래머는 거의 없다.
가능할 때마다 사용자 입력 변경을 피하십시오
쿼리 스크립트 에이 잠재적 인 문제를 발견하려면 코드의 마지막 비트를 살펴보십시오’s 사용자가 Drop 또는 Insert와 같은 행이없는 쿼리를 입력하면 실행합니다
// 행이 없습니다. 쿼리가 실행되었는지에 대해보고하십시오. "쿼리가 성공적으로 처리되었습니다.
"에코"
";
이 코드를 실행하십시오’그림 4-13에서 볼 수있는 것과 같은 것을 얻으십시오.
그림 4-13. 때로는 해결할 수있는 가장 좋은 문제는’t는 아직 일어났다. 여기에서 SQL 쿼리를 자세히 살펴보고 그림 4-12의 쿼리와 비교하십시오. 이런 종류의 지루한 탐정 작업은 몇 시간이 걸리지 만’현실 세계에서 웹 애플리케이션이 작동하는 데 절대적으로 중요합니다.
메모
만약 너라면’다시 따라 가면 필요할 수 있습니다 삭제 테이블 URL ; 당신이 할 수 있기 전에 만들다 다시, 또는 만들다 당신이 할 수 있기 전에 테이블 떨어지다 그것.
그림 4-12와 그림 4-13의 코드를 신중하게 비교하십시오. 그림 4-13에서, 당신’모든 것이 대문자에 있음을 알 수 있습니다. 검색을 더 쉽게하기 위해이 줄을 스크립트에 추가했기 때문에 의미가 있습니다
$ query_text = strtoupper ($ query_text);
그런 다음 출력 할 때 $ query_text 결국 출력은 모든 대문자로 표시됩니다. 이것은 큰 문제입니까?? 글쎄요, 그렇지 않습니다’t는 적어도 여기에 있지 않은 것 같습니다. 그러나 그것은 무언가를 드러낸다 : 그 후 $ query_text 문자열은 언제든지 대문자로 변환됩니다’사용 된 것, It’s는 모든 대문자로 돌아옵니다. 따라서 원래 쿼리가 다음과 같은 것이라고 가정합니다
last_name = "maclachlan"이라는 * 선택 *을 선택하십시오
이제 동일한 쿼리를 고려하여 모든 대문자로 바뀝니다
last_name = "maclachlan"이라는 * 선택 *을 선택하십시오
믿거 나 말거나, 이것들은 같은 쿼리가 아닙니다. 선택하다 다른 대부분의 SQL 쿼리는 성을 취급 할 것입니다 “맥 클라 클란” 완전히 다릅니다 “맥 클라 클란.” 따라서이 두 쿼리는 전혀 동일하지 않습니다.
현재 이것은 그렇지 않습니다’t 문제를 일으킨다. 스크립트는 쿼리를 다시 실행하지 않습니다 mysql_query 함께 실행됩니다 이전에 $ query_text 대문자 버전으로 바뀌 었습니다. 그러나 이것은 일어나기를 기다리는 문제입니다.
일반적으로 사용자의 입력을 직접 변경하지 않으려 고합니다. 저것’S는 이런 종류의 문제를 정확히 알기 때문에 : 해당 입력을 다시 사용해야 할 수도 있고 일단’VE가 변경되었습니다’돌아 간다.
운 좋게도 치료법은 간단합니다. 사용자를 변경하는 대신’s 입력, 대신 새 변수를 사용하여 쿼리의 대문자 버전을 저장합니다
$ return_rows = false; $ 대문자 _Query_Text = strtoupper ($ query_text);
$ location = strpos ($ query_text, "create");
이 새로운 변수를 모든 문자열 비교에서 사용해야합니다
$ return_rows = false; $ 대문자 _Query_Text = strtoupper ($ query_text);$ location = strpos ($ 대문자 _query_text, "create");
if ($ location === false) <$ location = strpos ($ 대문자 _query_text, "insert");
if ($ location === false) <$ location = strpos ($ 대문자 _query_text, "update");
if ($ location === false) <$ location = strpos ($ 대문자 _query_text, "delete");
if ($ location === false) <$ location = strpos ($ 대문자 _query_text, "drop");
if ($ location === false) < // If we got here, it's not a CREATE, INSERT, UPDATE, // DELETE, or DROP query. It should return rows. $return_rows = true; >>>>>
작은 변화만으로도 해당 쿼리 문자열을 다시 사용해야 할 경우를 대비하여 보호합니다.
그리고 당신처럼’VE는 실제로 던지는 SQL 쿼리를 실행할 도구를 실제로 얻었습니다. 그러나 거기’S는 여전히해야합니다. 모든 검색 코드가 실제로 스크립트를 혼란스럽게합니다’S 주변을 돌아 오지 않는다 : 당신의 대본은 처음 (그리고 두 번째) 한 눈에 이해하기가 매우 어렵다. 다음 장에서는 당신입니다’LL은 기본 편리한 형태에서 PHP 근육의 정말 멋진 운동으로이 모든 것을 다루십시오.
권한 사용자’ 클리닉 : 위치 및 공백 트리밍으로 구체적으로 처리하십시오
이 장에서는 당신입니다’확실히 만들고 있습니다 run_query.PHP 훨씬 더 좋지만 여전히 몇 가지 문제가 있습니다. 누군가가 다음과 같이 SQL을 썼다고 가정 해 봅시다
registrar_activities에서 * name = 'update gpa'또는 name = 'class a class'를 선택하십시오
이것은 선택하다 성명서 run_query.PHP SQL을 실행 하고이 쿼리에서 반환 된 모든 행을 인쇄해야합니다. 그러나 거기’불쾌한 작은 문제입니다’t 거기?
예. 검색하는 코드 “업데이트” 그리고 “떨어지다” 이 쿼리에 두 단어가 두 단어가 있다고보고하고 간단히 반환합니다 “SQL은 아무런 문제없이 실행되었습니다.” 그러나 그것은 ~이다 문제!
문제를 해결하려면 SQL의 구조에 대해 생각해보십시오. 그 특별한 키워드 - 생성, 삽입 , 그리고 그들의 친구 - 모두입니다 첫 번째 쿼리의 단어. 따라서 경기의 위치를 얻고 해당 위치가 위치인지 확인해야합니다. 당신은 당신의 추가함으로써 그렇게 할 수 있습니다 만약에 PHP에서 조건 및 OR 연산자 사용 :
if ($ location === false || $ location> 0)이중 파이프 (||)는 의미합니다 “또는” PHP에. 코드 라인은 거기에 있다면 말합니다’전혀 일치하지 않습니다 ( $ location === false ) 또는 경기가 시작됩니다’t 첫 번째 위치에서 시작하여 (위치 0) 다음 키워드를 찾으십시오. 물론, 당신’D는 당신의 모든 것을 바꿔야합니다 만약에 심지어 지저분한 진술. 따라서이 수정 사항은 개선입니다.
그러나 그것은 악화됩니다! 너’진짜 인간을 다루고 인간은 재미있는 일을합니다. 누군가 가이 SQL을 귀하의 양식으로 입력한다고 가정 해보십시오
테이블 URL을 작성하십시오 (ID int, URL Varchar (100), 설명 varchar (100));이제 당신’Ve는 새로운 문제를 겪었습니다. 이것은 ISN입니다’t a 선택하다 , 그러나 검색 코드가 승리했습니다’처음에 그 특별한 단어 중 하나를 찾으십시오. 첫 번째 캐릭터는 단지 공간입니다 “ ”.
그러나 다른 친숙한 기능을 사용 하여이 문제를 해결할 수 있습니다 손질. 손질 공백을 제거하고 검색하기 전에 그렇게하면 모양이 양호해야합니다
$ 대문자_Query_Text = trim (strtoupper ($ query_text));아마 정말 간단하고 1 텍사스 텍사리아 양식을위한 많은 작업처럼 보입니다. 하지만 당신이’사용자 입력으로 작업하면 사용자가 할 수있는 일에 대해 끊임없이 생각하고 싶습니다. 그리고 그들이 이상한 것을 보거나 실수를 피하는 것을 피하는 방법. 그렇게 생각하고 너’더 나은, 더 안정적이며, 더 즐거운 웹 애플리케이션을 구축 할 것입니다.
얻다 PHP & MYSQL : 누락 된 매뉴얼 이제 O와 함께’Reilly Learning Platform.
영형’Reilly 회원은 책, 라이브 이벤트, 직무 역할에 의해 큐 레이션 된 코스 등을 경험합니다’Reilly와 거의 200 명의 최고 출판사.
MySQL에 연결하려면 PHP를 사용해야합니까?
MySQL에 연결하려면 PHP를 사용해야하고 Desktop 애플리케이션에서 작업 중이며 PHP에 대한 지식이 없지만 PHP에 대한 많은 프로그램이 있지만 PHP에 대한 지식이 없습니다. 참조가 있습니까? 아니면 작업에 관한 단계별 예를 가질 수 있습니까?. MySQL 구성에는 기본 설정이 있습니다. 사용자 이름이 루트이고 비밀번호는 비어 있습니다. 내 서버 이름은 로컬 호스트입니다.
39.3K 4 4 골드 배지 37 37은 배지 59 59 브론즈 배지
2011 년 10 월 19 일에 23:00에 요청했습니다
7 4 4 청동 배지
이것을 PHP와 MySQL로 태그하고 Flex 태그를 제거했습니다. 이 질문은 Flex와 관련이 없습니다.
2011 년 10 월 20 일 0:34
3 답변 3
아니요. PHP는 프로그래밍 언어입니다. MySQL은 데이터베이스입니다. MySQL을 설치하고 명령 줄에서 MySQL을 입력하면 MySQL을 사용하여 MySQL에 연결됩니다.
2011 년 10 월 19 일 23:02에 답변
10.7K 11 11 금 배지 61 61은 배지 113 113 청동 배지
하지만 데이터베이스에 어떻게 연결합니까?.그렇게 할 수 없습니다. Adobe는 내가 알아야 할 빌드 라이브러리에 또는 데이터베이스에 연결할 수있는 다른 참조를 가지고 있습니다.이 주제에 대한 도움이 필요합니다.
MySQL 기능
메모:
대부분의 mySQL 함수는 Link_Indifier를 마지막 선택적 매개 변수로 받아들입니다. 제공되지 않으면 마지막으로 열린 연결이 사용됩니다. 존재하지 않으면 연결이 PHP에 정의 된 기본 매개 변수로 설정을 설정하려고합니다.이니 . 성공하지 못한 경우 기능이 반환됩니다 거짓 .
목차
- mysql_affected_rows - 이전 mysql 작동에서 영향을받는 행의 수를 얻으십시오
- mysql_client_encoding - 문자 세트의 이름을 반환합니다
- mysql_close - MySQL 연결을 닫습니다
- mysql_connect - mysql 서버에 대한 연결을 엽니 다
- mysql_create_db - MySQL 데이터베이스를 만듭니다
- mysql_data_seek - 내부 결과 포인터를 움직입니다
- mysql_db_name - 호출에서 mysql_list_dbs로 데이터베이스 이름을 검색합니다
- mysql_db_query - 데이터베이스를 선택하고 쿼리를 실행합니다
- mysql_drop_db - mysql 데이터베이스를 삭제 (삭제)
- mysql_errno - 이전 mysql 작동에서 오류 메시지의 숫자 값을 반환합니다
- mysql_error - 이전 mysql 작동에서 오류 메시지의 텍스트를 반환합니다
- mysql_escape_string - mysql_query에서 사용하기 위해 문자열을 탈출합니다
- mysql_fetch_array - 결과 행을 연관 배열, 숫자 배열 또는 둘 다로 가져옵니다
- mysql_fetch_assoc - 결과 행을 연관 배열로 가져옵니다
- mysql_fetch_field - 결과에서 열 정보를 얻고 개체로 반환합니다
- mysql_fetch_lengths - 결과에서 각 출력의 길이를 얻습니다
- mysql_fetch_object - 결과 행을 객체로 가져옵니다
- mysql_fetch_row - 결과 행을 열거 한 배열로 가져옵니다
- mysql_field_flags - 결과에서 지정된 필드와 관련된 플래그를 가져옵니다
- mysql_field_len - 지정된 필드의 길이를 반환합니다
- mysql_field_name - 결과에서 지정된 필드의 이름 가져 오기
- mysql_field_seek - 지정된 필드 오프셋에 대한 결과 포인터 설정
- mysql_field_table - 지정된 필드가
- mysql_field_type - 결과에서 지정된 필드 유형을 가져옵니다
- mysql_free_result - 무료 결과 메모리
- mysql_get_client_info - mysql 클라이언트 정보를 얻으십시오
- mysql_get_host_info - mysql 호스트 정보를 얻으십시오
- mysql_get_proto_info - mysql 프로토콜 정보를 얻으십시오
- mysql_get_server_info - mysql 서버 정보를 얻습니다
- mysql_info - 가장 최근의 쿼리에 대한 정보를 얻습니다
- mysql_insert_id - 마지막 쿼리에서 생성 된 ID를 가져옵니다
- mysql_list_dbs - MySQL 서버에서 사용 가능한 데이터베이스를 나열합니다
- mysql_list_fields - MySQL 테이블 필드를 나열하십시오
- mysql_list_processes - MySQL 프로세스를 나열합니다
- mysql_list_tables - MySQL 데이터베이스에 테이블을 나열합니다
- mysql_num_fields - 결과에 필드 수를 얻습니다
- mysql_num_rows - 결과에서 행의 수를 얻습니다
- mysql_pconnect - mysql 서버에 대한 지속적인 연결을 엽니 다
- mysql_ping - 서버 연결을 핑하거나 연결이없는 경우 다시 연결
- mysql_query - mysql 쿼리를 보내십시오
- mysql_real_escape_string - SQL 문에 사용하기 위해 특수 문자를 문자열로 빠져냅니다
- mysql_result - 결과 데이터를 얻습니다
- mysql_select_db - mysql 데이터베이스를 선택하십시오
- mysql_set_charset - 클라이언트 문자 세트를 설정합니다
- mysql_stat - 현재 시스템 상태를 얻습니다
- mysql_tablename - 필드의 테이블 이름을 얻습니다
- mysql_thread_id - 현재 스레드 ID를 반환합니다
- mysql_unbuffered_query - 결과 행을 가져 오지 않고 MySQL로 SQL 쿼리를 보내십시오
사용자는 메모 38 노트를 기여했습니다
15 년 전
# Dhirendra가 만든 Dhirendrak에서 Yahoo Dot Com에서 도달 할 수 있습니다
#이 스크립트는 두 테이블 간의 데이터 차이를 확인하기 위해 작성되었습니다
# 두 테이블의 구조가 동일 할 때.
# 제한 :
# 1) 두 테이블의 구조는 동일해야합니다.
# 2) 두 테이블의 이름이 다르지만 분명히 동일하다면
# 두 번째 테이블은 다른 데이터베이스이어야합니다.
# 3) 두 데이터베이스 권한보다 두 개의 데이터베이스를 사용하는 경우 두 데이터베이스 권한이 동일해야합니다
# 별명을 사용하여 정보를 얻을 때.
틀
# 사용 ::
# 1) 기존에 약간의 변경을했을 때 유용 할 수 있습니다
# 스크립트 및 특정 출력이 예상됩니다. 그래서 이것의 도움으로
# 기능 스크립트 변경으로 인한 영향을 비교할 수 있습니다.
틀
틀
?php
$ host = ""; # 호스트 이름 또는 IP 주소
$ user = ""; # 데이터베이스 사용자 이름
$ pass = ""; # 데이터베이스 비밀번호
$ database = ""; # Dateabase 이름을 연결하려는 이름입니다
# MySQL과 연결됩니다
$ dblink = @ mysql_connect ($ host, $ user, $ pass);
# 데이터베이스를 선택하고 열 수 있습니다
mysql_select_db ($ database, $ dblink);
$ db1 = "< your db1 >"; // 첫 번째 데이터베이스
// 두 번째 데이터베이스 데이터베이스가 DB1과 동일하게 사용하는 것보다 두 테이블에 대해 동일하다면
$ db2 = "< your db2 >";
$ table1 = "< your table1 >"; // 첫 번째 테이블
// 데이터베이스가 테이블 이름과 두 테이블에 대해 동일하다면 두 번째 테이블
#는 달라야하지만 필드 이름은 동일하고 필드의 순서는 동일합니다.
// 기능은 여기서 시작됩니다
기능 table_data_difference ($ first, $ second)
글로벌 $ dblink;
$ sql1 = "첫 번째에서 fields show first";
$ result = mysql_query ($ sql1, $ dblink) 또는 die ( "실행 오류가있는 1 = 키워드">. mysql_error ());
while ($ row = mysql_fetch_object ($ result))
<
$ from_fields [] = $ row-> 필드;
>
$ sql = "선택 *에서 $ first";
$ res = mysql_query ($ sql, $ dblink) 또는 die ( "실행 오류가있는 2 = 키워드">. mysql_error ());
$ j = 1;
while ($ row = mysql_fetch_array ($ res))
$ num = count ($ from_fields);
$ sql_next = "$ second를 선택하십시오 .* $ 2 초부터 ";
($ i = 0; $ i < $num ; $i ++)
$ sql_next = $ sql_next . "" " . $ 초 . "." . $ from_fields [$ i]. "= '" . $ row [$ from_fields [$ i]]. "' 그리고 " ;
>
$ sql_next = substr ($ sql_next, 0, strlen ($ sql_next) -5);
$ RES_NEXT = MYSQL_QUERY ($ SQL_NEXT, $ DBLINK) 또는 DIE ( "실행 오류가있는 3 = 키워드">. mysql_error ());
$ num1 = mysql_num_rows ($ res_next);
if ($ num1 == 0)
($ i = 0; $ i < count ( $from_fields ); $i ++)
$ val = $ val . "
" . $ from_fields [$ i]. "키워드">. $ 행 [$ from_fields [$ i]];
>
// 일치하지 않은 레코드를 표시합니다.
에코 "
\N" . $ j . "." . $ val;
에코 "
-----------------------------------------------------";
$ j ++;
>
$ first = $ db1 . '.' . $ table1;
$ second = $ db2 . '.' . $ table2;
table_data_difference ($ first, $ second);
16 년 전
Windows 사용자의 경우 : 참고 :
Apache가 서비스로 설치되고 경로 변수를 변경하여 libmysql에 도달 할 수 있습니다.DLL, 변경 사항을 적용하려면 컴퓨터를 재부팅해야합니다.
15 년 전
또한 MySQL 데이터를 보호하고 PCI 표준을 준수하려면 데이터를 암호화해야합니다. 그것을하는 방법에는 여러 가지가 있습니다. 해커의 경우 DM-Crypt (www.Saout.DE/MISC/DM-CRYPT) 도구. 기본적으로 전체 파티션을 암호화하는 데 사용됩니다. 정교한 솔루션을 원한다면 Packet General (www)의 MySQL의 보안 기관과 함께 이동하십시오.PacketGeneral.com)
Windows에서는 Windows 자체가 제공하는 디스크 암호화 기능 또는 Trucrypt (www)와 같은 도구를 사용할 수 있습니다.truecrypt.org)
15 년 전
@Amanda 12-OCT-2007 09:58
나는 이것이 진짜 질문인지 거의 스스로에게 물어봐야했다. MySQL 서버가 연결 시도를 거부하면 MySQL은 PHP에 오류를 다시 보낼 수 있습니다. PHP가 대상 MySQL 서버에 전혀 액세스 할 수 없다면 적절한 오류를 그 자체로 발행 할만 큼 똑똑합니다.
17 년 전
PHP가 MySQL, Apache와 함께 Windows 기반 시스템에서도 Apache Friends의 XAMPP를 사용해보십시오. 구성 파일에 대한 혼란을 저장하는데, 이는 Windows에서 세 가지가 함께 작동하도록하는 데있어 유일한 주요 문제입니다.
17 년 전
리소스에 대한 메모
자원이있을 때 (e.g. 링크 식별자)는 범위가 부족하고 삭제되고 관련 컴퓨터 리소스 (E.g. 데이터베이스에 대한 TCP 링크)도 종료됩니다. 여태까지는 그런대로 잘됐다!
그러나 다음 코드에서 TCP MySQL 링크는 실행 종료까지 지속됩니다
$ conn = mysql_connect ( 'hostname', 'username', 'password');
$ conn = null;
수면 (30);
?>
내부적으로 링크 식별기가 저장되기 때문에 후속 MySQL 기능이 작동하기 때문입니다. 이 내부 참조를 삭제할 방법이없는 것 같습니다.
그러나 2 개의 연결을 열려면 가장 오래된 연결이 자동으로 삭제됩니다 (따라서 호스트 이름에 대한 연결은 $ conn = null 문에서 종료되면 HostName2에 대한 연결은 스크립트 끝까지 존재합니다).
$ conn = mysql_connect ( 'hostname', 'username', 'password');
$ conn2 = mysql_connect ( 'hostname2', 'username', 'password');
$ conn = null;
$ conn2 = null;
수면 (30);
?>
17 년 전
IIS 6, PHP 5를 사용합니다.04, Windows Server 2003 및 MySQL 4.1.11. 그리고 여기 내가 알아낼 수 있었던 것이 있습니다.
MySQL과 PHP가 PHP에서 서로 대화하도록합니다.CFG, 태그를 켜는 것을 잊지 마십시오
CGI.force_redirect = 0이고 0으로 설정했는지 확인하십시오 (기본값은 1입니다. Code에서 Semi-Colon을 삭제하여 코드에서 활성화하면 PHPINFO는 Windows 루트 대신 PHP 설치 디렉토리에서 CFG를 읽는다고 말합니다. 그러면 당신의 phpinfo. 레지스트리 설정이나 복사가 필요하지 않습니다. 또한 사용자 의견의 나머지 도움을 따르십시오. 간단하게하기 위해 내가 한 일은 다음과 같습니다
프로그램 파일 바로 위의 폴더 트리에 폴더를 만들었고 (컴퓨터 탐색) PHP라고 명명되었습니다. 나는 그것을 추출했다 .ZIP PHP 버전 (자동 설치 버전이 아님). PHP를 편집했습니다.INI RECOMMENDEND, PHP로 이름을 바꾸고 SQL 사용자 이름, 데이터베이스 이름 등을 추가했습니다.(CFG 파일을 자세히 살펴보고 무언가를 간과하지 않도록해야합니다). 확장자 = php_mysql을 켰습니다.DLL (그냥 앞에있는 세미콜론을 삭제하십시오). PHP 폴더를 경로에 추가했습니다 (이를 수행하는 방법에 대한 지침은 매우 간단하고 위에서 문서화). 나는 또한 경로에 내선 폴더를 사용할 수있게했지만 그것이 정말로 필요한지 확실하지 않습니다. 사용자 의견은 실제로 도움이 되었기 때문에 호의를 돌려 주고이 주제를 조금 확장하려고 노력할 것이라고 생각했습니다.
18 년 전
Fedora MySQL 문제!!
Fedora 3에서는 PHP MySQL 모듈이 기본 설치와 함께 제공되지 않습니다. 설치하려면 $> yum을 설치하십시오. php_mysql
이 작업을 수행하지 않으면 mysql_connect ()와 같은 MySQL 기능으로 오류가 발생합니다
도움이 되었기를 바랍니다!
18 년 전
`mysql -html`의 출력을 복제하려면 HTML 테이블에서 결과를 인쇄하려면이 기능을 참조하십시오
21 년 전
안녕하세요, 여기 버전 3 이전에 MySQL 데이터베이스의 테이블에서 임의 순서로 레코드를 선택할 수있는 멋진 트릭이 있습니다.23
Myrandom의 항목 주문에서 Myrandom으로 *, (itemid/itemid) *rand ()를 선택하십시오
[편집자 참고 : 그리고 3 후 "rand ()의 foo order에서"선택 * ".23]
15 년 전
새로운 Windows XP 머신에서 IIS, PHP 및 MySQL을 마침내 얻은 후, 내가 수행 한 단계를 작성하기로 결정했습니다. http : // www.Atksolutions.com/articles/install_php_mysql_iis.HTML
도움이 되었기를 바랍니다.
15 년 전
/*
32 비트 Windows XP에 MySQL (커뮤니티) 서버 설치 Apache Running Apache
?php
Windows에서 MySQL을 실행하는 권장 방법은 Windows 서비스로 설치하는 것입니다. Windows가 시작되고 중지되면 MySQL이 자동으로 시작되고 중지됩니다. 서비스로 설치된 MySQL 서버는 명령 줄 명령 또는 Phpmyadmin과 같은 그래픽 서비스 유틸리티에서 제어 할 수 있습니다.
php ---> mysql 커넥터 (php_mysql.dll 및 php_mysqli.DLL AS EXTENSIONS)
MySQL.MySQL.com/downloads/connector/php/for mysql 버전 4.1.16 이상, MySQL 5.0.18, MySQL 5.1. PHP에서 PHP 확장을 활성화하는 것과 마찬가지로.ini (예 : php_mysql.DLL), PHP Directive Extension_Dir는 PHP 확장이있는 디렉토리로 설정되어야합니다.
MySQL은 기본적으로 더 이상 활성화되지 않으므로 php_mysql.DLL DLL은 PHP 내부에서 활성화되어야합니다.이니. 또한 PHP는 MySQL 클라이언트 라이브러리에 액세스해야합니다. libmysql이라는 파일.DLL은 Windows PHP 배포에 포함되며 PHP가 MySQL과 대화하려면이 파일을 Windows Systems Path에서 사용할 수 있어야합니다.
PHP 스크립트 다음은 MySQL과 PHP 연결을 테스트하는 데 유용합니다.
*/
// $ connect = mysql_connect ( "당신의 호스트 이름", "mysql root directory", 'mysql password, 어떤 경우');
// $ connect = mysql_connect ( "호스트 이름 또는 주소 -127.0.0.1 ","루트 ", '비밀번호');
$ connect = mysql_connect ( "localhost", "root", 'password');
if ($ connect) Echo "축하합니다!\N
";
Echo "MySQL 데이터베이스 서버에 성공적으로 연결되었습니다.\N
";
> else $ error = mysql_error ();
Echo "는 데이터베이스에 연결할 수 없었습니다. 오류 = $ 오류 .\N
";
출구();
>
// 연결을 닫습니다
$ close = mysql_close ($ connect);
if ($ close) echo "\ n
";
Echo "이제 연결을 닫습니다. \N
";
Echo "MySQL 연결도 성공적으로 닫혔습니다.\N
";
> Elseecho "MySQL 연결을 닫는 데 문제가 있습니다.\N
";
>
출구();
?>
16 년 전
DB 호출을 줄이기 위해이 기능을 수행했습니다. MySQL 결과를 세션 var에 저장하고 모든 열에서 결과를 정렬 할 수 있습니다. Ajax 앱에서 잘 작동 할 수 있습니다.
함수 mysql_sort ($ results, $ sort_field, $ dir = "asc") $ temp_array = array ();
$ i = 0;
foreach ($ rests as $ res) $ temp_array [$ i] = $ res [$ sort_field];
$ i ++;
>
if ($ dir == "asc") asort ($ temp_array);
> else arsort ($ temp_array);
>
$ new_Results = array ();
$ i = 0;
foreach ($ temp_array as $ k => $ v) $ new_Results [$ i] = $ results [$ k];
$ i ++;
>
KSORT ($ new_Results);
$ new_Results를 반환합니다
//사용
if (count ($ _ session [ "res"]) == 0) $ _session [ "res"] = [데이터베이스 결과를 가져 오지만]
>
$ _session [ "res"] = mysql_sort ($ _ session [ "res"], $ _request [ "sort"], $ _request [ "dir"]);
17 년 전
John Coggeshall은 여전히 이전 ext/mySQL 기능을 사용하는 응용 프로그램에 대한 PHP5 EXT/MYSQLI 호환성 스크립트를 작성했습니다. 이것은 PHP5에 MySQL과 MySQLI 확장을 모두 갖추려고 시도하는 번거 로움을 방지합니다.
17 년 전
Windows Server 2003/IIS로 MySQL 활성화.0 :
PHP를 찾으십시오.ini 파일 먼저, phpinfo ()를 확인하여 PHP가 현재 PHP를 찾고있는 위치를 확인하십시오.이니. (나.이자형. PHP 5 용 Windows 설치 프로그램 사용.0.4, PHP.ini 파일은 c : \ windows dir에 배치되었습니다.) 그러나 설치 프로그램을 사용하지 않는 것이 좋습니다. 전체 수동 설치로 가십시오.
PHP에서 다음을 설정하십시오.INI :
display_errors = on
error_reporting = e_all
이렇게하면 구성 중에 발생하는 오류가 표시됩니다. PHP로 연주 할 때이를 수정하십시오.이니! 이와 같은 설정을 프로덕션 머신에 두지 마십시오.
PHP에서.INI는 다음을 설정합니다
Extension_dir = "PathToextensions (ususally [YourPathTophp] \ ext)"
Extension = php_mysql.DLL (이미 PHP에있는 경우 이것이 제작되지 않은지 확인하십시오.INI)
IIS에서 웹 서비스 확장을 열면 "새 웹 서비스 확장 추가 추가"를 클릭하십시오. "
확장 이름의 유형 인 PHP
필수 파일 아래 :
[YourPathTophp] \ php5isapi를 추가하십시오.DLL
[YourPathTophp] \ php5ts를 추가하십시오.DLL
'적용'을 클릭 한 다음 '확인'을 클릭하십시오
평소와 같은 웹 사이트를 작성하지만 스크립트 액세스뿐만 아니라 실행 가능한 권한이 있는지 확인하십시오. "홈 디렉토리"탭에서 '구성'을 클릭하십시오. 상단의 목록을 아래로 스크롤하고 PHP를 찾을 수 있는지 확인하십시오. 그렇다면 PHP 실행 파일의 경로가 올바른지 확인하십시오. 목록에서 PHP를 찾지 못하면 '추가'를 클릭하십시오. ', 그런 다음 올바른 실행 파일로 탐색, [YourPathTophp] \ php5isapi.DLL을 클릭하십시오. 확장 필드에서 'PHP'를 입력하십시오. 동사는 이미 '모든 동사'로 설정되어야합니다.
이 코드로 테스트 페이지를 만듭니다
테스트라고 부릅니다.PHP,이 파일을 방금 만든 웹 사이트에 배치하십시오. Firefox를 사용하여 페이지로 찾아보기;). 그렇지 않다면, 경로가 망쳐 지거나 여전히 올바른 PHP를 편집하지 않을 수도 있습니다.ini (다시, phpinfo ()가 보여주는 위치를보고, 필요한 경우 편집 한 다음 나중에 이동하고 다시 코발하십시오).
mysql_connect
이 연장은 PHP 5에서 더 이상 사용되지 않았다.5.PHP 7에서 제거되었다.0.0. 대신, mysqli 또는 pdo_mysql 확장자를 사용해야합니다. MySQL : API 안내서 선택도 참조하십시오. 이 기능에 대한 대안은 다음과 같습니다
설명
mysql_connect (
문자열 $ server = ini_get ( "mysql.default_host ") ,
문자열 $ username = ini_get ( "mysql.default_user ") ,
문자열 $ password = ini_get ( "mysql.default_password ") ,
bool $ new_link = 거짓 ,
int $ client_flags = 0입니다
) : 자원 | 거짓
MySQL 서버에 대한 연결을 열거나 재사용합니다.
매개 변수
MySQL 서버. 포트 번호도 포함 할 수 있습니다. 이자형.g. "호스트 이름 : 포트"또는 로컬 소켓 경로 E.g. 로컬 호스트의 ":/path/to/socket".
PHP 지침 MySQL 인 경우.default_host는 정의되지 않은 (기본값), 기본값은 'localhost : 3306'입니다. SQL 안전 모드 에서이 매개 변수는 무시되고 'LocalHost : 3306'이 항상 사용됩니다.
사용자 이름. 기본값은 MySQL에 의해 정의됩니다.default_user. SQL 안전 모드 에서이 매개 변수는 무시되고 서버 프로세스를 소유 한 사용자의 이름이 사용됩니다.
비밀번호. 기본값은 MySQL에 의해 정의됩니다.default_password. SQL 안전 모드 에서이 매개 변수는 무시되고 빈 암호가 사용됩니다.
두 번째 전화가 이루어지면 mysql_connect () 동일한 인수로 새 링크가 설정되지 않지만 대신 이미 열린 링크의 링크 식별자가 반환됩니다. New_Link 매개 변수는이 동작을 수정하고 만듭니다 mysql_connect () 계더라도 항상 새 링크를 엽니 다 mysql_connect () 동일한 매개 변수로 이전에 호출되었습니다. SQL 안전 모드에서는이 매개 변수가 무시됩니다.
client_flags 매개 변수는 다음 상수의 조합 일 수 있습니다. 128 (로드 데이터 활성화 로컬 처리), mysql_client_ssl , mysql_client_compress , mysql_client_ignore_space 또는 mysql_client_interactive . 자세한 내용은 MySQL 클라이언트 상수에 대한 섹션을 읽으십시오. SQL 안전 모드에서는이 매개 변수가 무시됩니다.
반환 값
성공 또는 MySQL 링크 식별자를 반환합니다 거짓 실패에.
예
예제 #1 mysql_connect () 예
$ link = mysql_connect ( 'localhost', 'mysql_user', 'mysql_password');
만약에 (! $ link) 다이 ( '연결할 수 없음 :' . mysql_error ());
>
에코 '성공적으로 연결되어있다';
mysql_close ($ link);
?>?php
예제 #2 mysql_connect () 호스트 이름 사용 예 : 포트 구문
// 우리는 예제에 연결합니다.Com 및 포트 3307
$ link = mysql_connect ( '예제.com : 3307 ','mysql_user ','mysql_password ');
만약에 (! $ link) 다이 ( '연결할 수 없음 :' . mysql_error ());
>
에코 '성공적으로 연결되어있다';
mysql_close ($ link);
?php
// 우리는 포트 3307의 LocalHost에 연결합니다
$ link = mysql_connect ( '127.0.0.1 : 3307 ','mysql_user ','mysql_password ');
만약에 (! $ link) 다이 ( '연결할 수 없음 :' . mysql_error ());
>
에코 '성공적으로 연결되어있다';
mysql_close ($ link);
?>
예 #3 mysql_connect () ":/path/to/socket"구문 사용 예
// 우리는 LocalHost 및 소켓에 연결합니다. e.g. /tmp/mysql.양말
?php
// 변형 1 : LocalHost를 생략합니다
$ link = mysql_connect ( ':/tmp/mysql', 'mysql_user', 'mysql_password');
만약에 (! $ link) 다이 ( '연결할 수 없음 :' . mysql_error ());
>
에코 '성공적으로 연결되어있다';
mysql_close ($ link);
// Variant 2 : LocalHost와 함께
$ link = mysql_connect ( 'localhost :/tmp/mysql.양말 ','mysql_user ','mysql_password ');
만약에 (! $ link) 다이 ( '연결할 수 없음 :' . mysql_error ());
>
에코 '성공적으로 연결되어있다';
mysql_close ($ link);
?>
노트
메모:
"localhost"또는 "localhost : port"를 서버로 지정할 때마다 MySQL 클라이언트 라이브러리는이를 무시하고 로컬 소켓 (Windows의 파이프)에 연결하려고합니다. TCP/IP를 사용하려면 "127을 사용하십시오.0.0."localhost"대신 1 ". MySQL 클라이언트 라이브러리가 잘못된 로컬 소켓에 연결하려는 경우 올바른 경로를 MySQL로 설정해야합니다.php의 default_host.INI와 서버 필드는 비워 두었습니다.
메모:
스크립트 실행이 종료 되 자마자 서버에 대한 링크는 mysql_close ()를 명시 적으로 호출하여 일찍 닫히지 않는 한 닫힙니다 .
메모:
오류 "TCP/IP 소켓 (10106)을 생성 할 수 없음"은 일반적으로 변수 _Order 구성에 문자가 포함되어 있지 않음을 의미합니다 . Windows에서 환경이 복사되지 않으면 SystemRoot 환경 변수를 사용할 수없고 PHP는 Winsock을로드하는 데 문제가 있습니다.
또한보십시오
- mysql_pconnect () - mysql 서버에 대한 지속적인 연결을 엽니 다
- mysql_close () - MySQL 연결을 닫습니다
사용자는 메모 36 참고 사항을 기여했습니다
10 년 전
UTF8을 사용하는 경우 여기에서 조심하십시오.
파일 DB.데이터베이스의 선택은 다음 줄을 포함해야합니다
기본 문자 세트 = UTF8
Default-Collation = utf8_general_ci
그것은 당신의 데이터베이스가 UTF8 문자 세트를 사용하도록 만들어 졌음을 의미합니다.
이를 달성하는 한 가지 방법은 다음과 같습니다
데이터베이스 생성 my_database 기본 문자 세트 UTF8 COLLATE UTF8_GENERAL_CI;
그런 다음 PHP에서 연결 한 후 다음을 사용해야합니다
mysql_set_charset ( "utf8", $ connection);
이 작업을 수행하지 않으면 다른 소프트웨어가 동일한 데이터베이스를 읽고 쓰는 경우 추악한 문제가 발생합니다.
15 년 전
너무 많은 연결 문제는 몇 가지 문제로 인한 것일 수 있습니다.
1. 당신은 pconnect를 사용하고 있습니다. 이것은 많은 연결을 묶을 수 있으며 새로운 연결이 정말 빠르기 때문에 MySQL에는 실제로 필요하지 않습니다.
2. 아파치 아이들은 너무 오랫동안 매달려 있습니다 - 이것을 pconnect와 결합하면 재난 레시피가 있습니다.
제안 : 아파치 아동 프로세스가 클라이언트와 연결되어있는 시간과 그들이 죽기 전에 얼마나 많은 연결을 유지하는지 감소. 그리고 pconnect를 사용하지 마십시오.
6 년전
fcgid_module 모듈/mod_fcgid.그래서
FCGIDMAXREQUESTLEN 209715200
fcgidconnecttimeout 240
fcgidiotimeout 240
fcgidbusyscaninterval 240
FCGIDBUSYTIMEOUT 240
# esta línea instruye al servidor 웹 파라 que reconozca un tipo nuevo (PHP)
addhandler fcgid-script .PHP
# esta línea indica al servidor 웹 donde está instalado php.
fcgidinitialenv phprc "c :/php"
# esta línea indica al servidor web que debe debe ejecutar la amplicación
# PHP-CGI.Exe Cuando UN Cliente (Navegador) Solicite Una Página Con
# 확대 .PHP
fcgidwrapper "c :/php/php-cgi.exe " .PHP
# con esta línea damos los permisos necesarios para que los clientes puedan
# Acceder/Ejecutar A Los Archivos .PHP
옵션 인덱스 followsymlinks에는 execcgi가 포함됩니다
허용 없음
모두에게 허용합니다
16 년 전
다른 사람이 "클라이언트가 서버에서 요청한 인증 프로토콜을 지원하지 않으며 MySQL 클라이언트 업그레이드"오류를받는 경우. 문제는 mysql> = 4에서 사용한 새로운 암호 해싱 방법입니다.1 아래 언급.
새 비밀번호 해싱이 지원되는 곳에서 PHP를 V5로 업데이트하거나 MySQL 4에서 Old_password ()를 사용하십시오.1.
MySQL 업데이트.사용자 설정 암호 = old_password ( "YouroldHashPassword") 여기서 user = 'youruserid'및 host = 'yourhost'
9 년 전
$ spojeni = mysql_connect ($ server, $ login, $ pass) 또는 die ( 'nelze se pripojit');
mysql_select_db ($ db, $ spojeni);
mysql_query ( "set names 'utf8'");
?>
15 년 전
mysql_client_ssl은 작동하지 않으며 mysqli 및 mysqli-> ssl_set ()를 사용하십시오
13 년 전
바라건대 이것은 누군가에게 슬픔을 구해줍니다.
내 개발자 컴퓨터는 Windows이며 Wampserver를 실행합니다. 극심한 DB 활동 기간 후 PHP가 MySQL에 연결할 수없는 경우 자주 문제가 있습니다.
간단히 말해서, 지명 된 파이프를 통해 MySQL을 실행하지 않았고 Windows가 PHP에 서비스를 제공하기 위해 사용 가능한 포트가 부족했기 때문입니다. 분명히 Windows에는 5000 개의 포트가 작업 할 수 있으며 일단 열린 후에는 120 초 동안 남아 있습니다. 각 연결에 새 포트가 요청되므로 MySQL/네트워킹에 문제가 발생합니다.
문제에 대한 자세한 내용은 다음과 같습니다
(너무 오래 링크하고 분해해야했습니다)
http : // dev.MySQL.com/doc/refman/5.0/en
/서버에 연결할 수 없습니다.html#캔트-서버-윈도우를 사용할 수 없습니다
?>
MySQL이 LocalHost에 있기 때문에 해당 페이지에 나열된 해결 방법 대신 문제를 해결할 수 있도록 명명 된 파이프 (네트워킹이 필요하지 않은 경우 MySQL 설정이 있어야하는 방법)를 활성화 할 수 있습니다.
20 년 전에
모르는 경우를 대비하여. 함수에서 mysql_connect를 사용하여 데이터베이스에 연결할 수 있으며 연결은 슈퍼 글로벌입니다. 즉, 다른 함수에서 mysql_query를 사용할 수 있거나 전혀 기능이 없으면 PHP는 열린 연결을 사용합니다. 이것은 스크립트가 많은 큰 사이트를 가지고 있다면 도움이되는 편리한 지식입니다. DB에 연결하는 하나의 함수를 만들고 모든 스크립트에서 해당 기능을 호출하는 경우 모든 스크립트를 개별적으로 업데이트하는 대신 MySQL 연결을 변경하기 위해 하나의 코드를 업데이트해야하므로 코드 유지 관리가 더 쉬워집니다.
15 년 전
MySQL 연결을 사용하면 객체에서 까다로울 수 있습니다. 나는 내가 쓴 데이터베이스 클래스에서 mysql_connect ()를 사용하고 있으며 클래스 소멸자는 mysql_close를 호출합니다. 이러한 데이터베이스 개체가 여러 개 있기 때문에 MySQL_Connect는 기존 연결을 재사용합니다. 스크립트가 실행 종료에 도달하고 PHP의 Garabage Collection이 모든 개체의 __destruct () 함수를 호출하는 경우를 제외하고는 괜찮습니다. mysql_close ()는 연결이 유효하지 않다는 경고를 던지고 내 경우에는 한 개체의 경우. 연결이 이미 닫혔으므로 기존 연결을 사용하는 객체에서 발생합니다. MySQL_Connect ()가 매번 새로운 연결을 만들도록 강요하여 문제를 해결했습니다. 이것은 효율적이지 않지만 지금은 내 목적에 충분합니다.
나는 이것이 버그 당사자라고 말하지 않을 것이지만, 그것은 찾아야 할 것입니다. MySQLI를 사용하는 것이 최고의 솔루션이라고 생각합니다.
15 년 전
때로는 앱이 필요할 때 MySQL 서비스가 자동으로 시작되기를 원합니다. 개발 PC 및/또는 소규모 인트라넷 환경에서 일하는 경우 특히 그렇습니다.
당신은 다음과 같은 일을 할 수 있습니다 : mysql_connect () 함수가 false를 반환하면 mysql 서비스의 초기화를 강요하십시오!
예를 들어, Windows에서 :
$ link = @ mysql_connect ($ server, $ user, $ pass);
if (empty ($ link)) @ exec ( "%SystemRoot%\\ System32 \\ net.exe start mysql ");
수면 (5);
$ link = @ mysql_connect ($ servidor, $ usuario, $ clave);
>
?>
물론 Linux에서는 "/etc/init.d/mysqld start "하지만 특별한 권한이 필요합니다.
16 년 전
동일한 인수가있는 첫 번째와 두 번째 호출 사이에 또 다른 인수가있는 또 다른 호출이있는 경우, 초기 연결 링크가 재사용되지 않지만 New_Link 인수에 관계없이 새로운 연결이 생성됩니다.
예를 들어, 여기에서 하나의 단일 링크 만 열린 다음 재사용됩니다
$ link1 = mysql_connect ( "localhost");
$ link2 = mysql_connect ( "localhost");
?>
여기 _three_ 별도 링크가 열립니다
$ link1 = mysql_connect ( "localhost");
$ link3 = mysql_connect ( "127.0.0.1" );
$ link2 = mysql_connect ( "localhost");
?>
따라서 MySQL_Connect 로의 호출만으로 연결을 전환하고 내부 링크 캐싱에 의존하려면 데이터베이스 연결을 낭비 할 수 있습니다.
13 년 전
단일 데이터베이스에 두 개의 연결을 열 때마다,
기존 DB를 선택할 때 오류가 발생하지 않을 수 있습니다.
$ db1 = mysql_connect ( . );
mysql_select_db ( '기존 _db', $ db1);
$ db2 = mysql_connect ( . );
mysql_select_db ( 'not_existing_db', $ db2);
mysql_query (. , $ db2);
// 오류를 반환하지 않으면 쿼리가 실행되지 않습니다.
?>
주의를 기울이면 몇 시간 동안 디버깅을 절약 할 수 있습니다.
12 년 전
이 명령을 먼 서버에 사용하여 속도 문제가 발생하면 내에 "Skip-Name Resolve"라인을 추가 할 수 있습니다.CNF를 고칠 수 있습니다.
19 년 전
MySQL의 로컬 인프레 기능 부하 데이터를 사용하려면 (MySQL 4에서.0.16, php 4.삼.3), mysql c api를 기반으로하는 mysql_connect ()의 다섯 번째 매개 변수를 client_local_files (128)로 설정합니다
이것을 지적 해 주신 'Eden2 dot com'의 phpweb에 감사드립니다
16 년 전
HTTPD에 항목 추가.멈추는 콘크리트 .Apache가 제공하는 Inc 파일은 확실히 유용하며 권장됩니다.
그러나 PHP 프로세서가 그들에게 얻을 수 있도록 Apache 가이 파일을 읽을 수 있어야한다는 사실은 변경되지 않습니다.
당신이 당신의 컴퓨터에 여러 가지, 아마도 신뢰할 수없는 사용자가없는 한, 괜찮습니다. 그러나 수천 명의 사용자와 함께 대규모 사용자 서비스를 실행할 때는 항상 그들 중 하나가 당신을 볼 수 있습니다 .INC 파일을 파일하고 당신이 가지고있는 비밀번호를 기록하십시오. 그들은 심지어 그들 자신의 스크립트에 복사하여 데이터베이스를 수정할 수도 있습니다!
로컬 사용자가 신뢰할 수 있더라도 무지한 사용자가 불량 스크립트 (PHP 또는 일부 언어)를 설치할 가능성이 항상 있습니다. 그러면 그 대본은 당신의 것을 읽을 수 있습니다 .Inc 파일 (웹 게시 트리에 있든 없든) 및 비밀번호를 노출시킵니다.
19 년 전
사용자 이름과 암호를 스크립트에 넣는 보안 문제에 대한 또 다른 솔루션. 나는 다른 곳 에서이 문서를 찾지 못했기 때문에 온라인 문서에 대해 제안 할 것이라고 생각했습니다. .
MySQL의 비밀번호를 기기의 사용자가 읽을 수있는 스크립트에 넣지 마십시오. 대신 Apache 구성 파일에 넣고 세계에서 읽을 수 없는지 확인하십시오. (Apache는 기본 구성 파일을 루트로 읽습니다.))
예를 들어, 이것을 httpd에 추가하십시오.conf (및 600 또는 660으로 chmod) Apache 자체를 다시로드하도록 지시하십시오 (Apachecectl Graceful).
php_value mysql.default_user fred
php_value mysql.default_password Secret
php_value mysql.default_host 서버.예.com
그런 다음 PHP 코드에 필요한 모든 것이 있습니다
$ hone = mysql_connect () 또는 die (mysql_error ());
비밀번호 등은 이름이 지정된 디렉토리 (또는 하위 디렉토리)에서 실행되는 스크립트 만 선택합니다. 가상 호스트 등에 대해서도 마찬가지입니다.
Apache 서버를 계속 다시로드하고 싶지 않다면 PHP_Value 지시문을 A (World Readable)에 넣는 것을 테스트합니다 .htaccess 파일. (생산 사용은 분명히 아닙니다.))
제공되는 값을 디버깅 해야하는 경우 (또는 그렇지 않음)이 스 니펫을 사용하십시오
@syslog (log_debug, "us user =".ini_get ( "mysql.default_user ").
"Pass =".ini_get ( "mysql.default_password ").
"호스트 =".ini_get ( "mysql.default_host ");
(이것은 당신이 'safe_mode'에서 실행되지 않고 어떤 종류의 유닉스에 있다고 가정합니다.))
12 년 전
내 상황 : "MySQL 콘솔을 통해 Apache 및 MySQL을 통해 PHP에서 MySQL에 연결할 수 있었으며 PHP를 통해 연결할 수 없었습니다."
그러나 PHP는 mysql_connect ( "localhost", "root", "password")를 사용하여 MySQL에만 연결할 수 있습니다
"Selinux는 Apache가 원격 연결을 만들 수 있도록 허용하지 않습니다"
해결책:
setsebool -p httpd_can_network_connect = 1
15 년 전
최근에 MySQL 콘솔을 통해 Apache 및 MySQL을 통해 PHP에서 MySQL에 연결할 수있는 모호한 문제를 보았으며 PHP-CLI를 통해 연결할 수 없었습니다. 이것은 Windows (XP)에있었습니다. 나는 보통 MySQLI 확장을 사용하지만 MySQL도 시도했지만 둘 다 작업을 거부했습니다.
서비스를 여러 번 다시 시작했지만 PHP-CLI는 여전히 연결되지 않습니다.
이것은 결국 정리되었습니다.
서비스를 중단했습니다. 그런 다음 Dev에서 Zipped Binary-Package를 다운로드했습니다.MySQL.Com 및 CommandLine (MySQLD/MySQLD-NT, MySQLD-NT가 Windows를 위해 특별히 조정 된 MySQLD/MySQLD-NT)에서 서버를 몇 번 시작하고 ( "MySQLADMIN SHUTDOWN") 중지했습니다. 그런 다음 PHP -CLI ( "php -r"mysql_connect ( 'localhost', 'root', '')에서 성공적으로 연결할 수있었습니다.
그것이 중지되었는지 확인하고, 나는 Commandline에서 일반 서버를 시작했고, 그때는 성공적이었습니다. 그런 다음 멈추고 서비스 패널을 통해 시작했지만 모든 것이 여전히 작동했습니다.
서비스가 처음에 다시 시작되었을 때 서비스가 중지 된 것처럼 보이지만 사망하고 셧다운을 거부 한 구성 요소가 있었지만 MySQLadmin을 통해 종료하면 모든 것을 완전히 죽였습니다.
13 년 전
PHP 5 이후 Windows의 이름이 지정된 파이프가 사용할 수 없습니다.3, 그리고 TCP 연결은 LocalHost에서도 사용해야합니다.
16 년 전
Ed Dot AC Dot UK의 'Graham_rule'의 게시물에는 다음 경고가 포함되어야합니다
WARING : 코드 중 하나에 phpinfo () 함수가 포함 된 경우 이러한 지침의 값이 노출됩니다.
phpinfo () 함수는이 값이 하루처럼 명확하게 인쇄됩니다. MySQL 인증 정보를 저장하는이 방법에 대해 강력히 제안합니다.
별도의 포함 파일로 연결 및 정리 기능을 만드는 것이 좋습니다. 보안이 우려되는 경우 웹 루트 폴더 외부에 포함 파일을 찾으십시오.
함수 getMyConnection ()
글로벌 $ g_link;
if ($ g_link)
return $ g_link;
$ g_link = mysql_connect ( '호스트.이름 ','사용자 ','비밀번호 ') 또는 다이 ('서버에 연결할 수 없음.');
mysql_select_db ( 'database_name', $ g_link) 또는 다이 ( '데이터베이스를 선택할 수 없음.');
return $ g_link;
>
함수 cleanupdb ()
글로벌 $ g_link;
if ($ g_link != 거짓)
mysql_close ($ g_link);
$ g_link = false;
>
?>
단순히 당신의 연결을 포함 시키십시오.스크립트의 PHP 파일 및 MySQL_Query () 함수를 사용하는 모든 곳.
$ res = mysql_query ( "select . ", getMyConnection ());
?>
15 년 전
동일한 MySQL 사용자, 비밀번호 및 호스트 이름으로 다중의 별도의 MySQL 연결을 열려고하는 경우 기존 연결을 사용하지 않도록 $ new_link = true를 설정해야합니다.
예를 들어, 두 개의 다른 데이터베이스 (동일한 호스트, 동일한 사용자 및 비밀번호)에 대한 두 개의 별도 연결을 열고 있습니다
$ db1 = mysql_connect ($ dbhost, $ dbuser, $ dbpass);
$ rv = mysql_select_db ($ dbname1, $ db1);
$ db2 = mysql_connect ($ dbhost, $ dbuser, $ dbpass);
$ rv = mysql_select_db ($ dbname2, $ db2);
이 시점에서 $ db1과 $ db2는 모두 $ dbname2로 이름이 지정된 데이터베이스를 선택했습니다.
해결 방법은 두 번째 MySQL 연결이 새롭도록 요구하는 것입니다
$ db1 = mysql_connect ($ dbhost, $ dbuser, $ dbpass);
$ rv = mysql_select_db ($ dbname1, $ db1);
$ db2 = mysql_connect ($ dbhost, $ dbuser, $ dbpass, true);
$ rv = mysql_select_db ($ dbname2, $ db2);
이제 $ db1은 $ dbname1을 선택했고 $ db2는 $ dbname2를 선택해야합니다.
이것은 mysql_select_db 페이지에 문서화되었습니다.
참고 : 서버, 사용자 이름 및 비밀번호 매개 변수가 각 MySQL_Connect 문에 대해 동일 할 때만 발생합니다.
11 년 전
휴대용 연결 : 소스 코드를 하나에서 다른 서버로 마이그레이션하고 새 서브에서 재구성을 피하려면 $ _server [ 'server_name'] 플래그를 사용하십시오
스위치 ($ _server [ 'server_name'])
<
CASE 'Server1.예.com ':
mysqlConnect ( 'host1', 'user1', 'password1');
mysql_select_db ( 'db1');
부서지다;
CASE 'Server2.예.com ':
mysqlConnect ( 'host2', 'user2', 'password2');
mysql_select_db ( 'db2');
부서지다;
>
?>
이것은 MySQL 데이터베이스에 조건부 연결됩니다. 스크립트가 실행되는 서버 이름에 따라 올바른 서버를 자동으로 선택합니다.
바라건대, 당신은이 휴대용 구성을 좋아합니다.
16 년 전
스크립트에서 연결 문자열의 IP 대신 호스트 이름을 사용하는 것을 선호하지만 DNS 조회의 오버 헤드를 원하지 않는 경우/etc/hosts 파일에 추가하십시오 (Windows : %Windir %/system32/drivers/etc/hosts).
예를 들어, 호스트 파일에 다음을 추가합니다 (가짜 IP를 서버의 실제 IP로 변경) :
참고 : Linux에서 /etc /host에 "주문 : 호스트, 바인드"가 있는지 확인하십시오.conf 파일.
스크립트에서 MySQL 연결을 그렇게하십시오
$ sid = mysql_connect ( "mysqlserver1", "user", "pass");
?>
참고 :이 샘플은 PHP에 있지만 다른 프로그래밍 언어 일 수 있습니다 (서버에서 프롬프트에 "Ping MysqlServer1"을 입력하십시오)
그리고 당신은 그것을 가지고 있습니다! 서버가 다른 IP가 할당 된 경우 새 IP 파일로 호스트 파일을 업데이트하기 만하면 (모든 스크립트가 다른 호스트 이름에 있더라도 모든 스크립트가 작동합니다).
10 년 전
약간의 메모 스크립트가 많이 자면 정확히 같은 SQL 문을 2 회 이상 실행하고 싶고 "MySQL이 멀리 떨어져"오류가 많이 있습니다.
PHP가 마지막 동일한 조회에 사용 된 리소스 ID X를 발견하지 못한 것처럼 보이기 때문에 4 번째 매개 변수를 true로 설정해보십시오. 이제 DUD이므로 사용하려고 시도하므로 IS_RESOURCE ()와 같은 테스트를 우회하고 실패를 유발합니다.
MySQL_PING ()가 귀하의 상황에서 효과가 없을 때입니다.
18 년 전
MySQL4에서.1 이후, 기본 비밀번호 해싱 형식이 변경되어 3과 호환되지 않습니다.X 클라이언트.
MySQL_Connect ()가 서버 버전에서 작업하는 것을 발견했습니다.> = 4.1이 경우 비밀번호 인증이 수행되지 않기 때문에 MySQL 사용자 비밀번호가 비어있는 경우 다른 연결 방법을 사용해야합니다.g. mysqli).
또한 새 서버에서 오래된 MySQL 테이블을 사용하는 경우.이자형. 비밀번호는 이전 형식으로 저장됩니다. 그러면 서버는 이전 인증 메소드를 자동으로 사용 하고이 기능은 모든 경우에 작동해야합니다.
바라건대 이것은 누군가를 도울 것입니다.1 서버는 연결할 수 있었고 일부는 연결할 수 없었습니다.
16 년 전
"기본 사용자 이름"이 무엇인지 궁금합니다?
$ link = mysql_connect () 또는 die (mysql_error ());
$ result = mysql_query ( "select session_user (), current_user ();");
$ row = mysql_fetch_row ($ result);
Echo "세션 사용자 :", $ row [0], "
\N" ;
Echo "현재 사용자 :", $ row [1], "
\N" ;
?>
둘 다 Win2k 설치에서 Odbc@localhost이므로 Windows에 대한 조언은 다음과 같습니다
- 비밀번호가없는 ODBC라는 MySQL 사용자를 만듭니다
- ODBC 사용자에 LocalHost 추가 [ODBC를 마우스 오른쪽 버튼으로 클릭]
- 스키마 previleges를 odbc@localhost로 설정하십시오
- PARM이없는 mysql_connect ()를 사용하거나 사용하지 않습니다.)
이것은 ODBC_Connect 와도 작동합니다
odbc_connect ( "mydsn", "", "")
9 년 전
여러분, 안녕하세요.
"127을 사용하십시오.0.0.PHP5의 "LocalHost"대신 1 ".속도가 느리다고 느끼면 4-WIN7.Win7은 IPv6 기본값을 사용하기 때문입니다.
"LocalHost"는 IPv4 용입니다.
14 년 전
단지 한 줄의 SQL 문을 실행하는 데 사용하는 공통 래퍼를 공유하고 싶었습니다. 연결이 열린/닫기를 처리하는 쉬운 래퍼입니다. 선택적으로 MySQL_Connect는 영구 연결을 위해 MySQL_PCONNECT로 대체 할 수 있습니다.
함수 executeQuery ($ query, $ db, $ nocon)
if ($ nocon != "Nocon")
if ($ db != "") Connect ($ db);
else connect ( "pascal_crm");
$ result = mysql_query ($ query);
$ err = mysql_error ();
if ($ err != "") echo "error = $ err";
if ($ nocon != "Nocon")
mysql_close ();
반환 $ 결과;
>
17 년 전
Windows 아래에서 명명 된 파이프를 통해 MySQL에 연결하십시오
내.INI, 이것을 추가하십시오
그런 다음 서버에 연결 한 다음 MySQL에 연결하십시오
14 년 전
저장된 프로 시저를 연결하고 사용할 때 Connect 명령을 통해 특수 플래그를 MySQL로 전달해야합니다. 그렇지 않으면 결과가 반환되지 않으면이 오류가 발생합니다
절차 Alexgrim.getStats_ForUMCategorys 주어진 컨텍스트에서 세트 세트를 반환 할 수 없습니다
이 문제를 해결하려면 연결 문자열을 변경하고 마지막 2 개의 필드로 ", false, 65536"을 추가하십시오
$ this-> con = mysql_connect ($ this-> h, $ this-> u, $ this-> p, false, 65536);
13 년 전
"요청 된 주소를 할당 할 수 없음"오류가 발생하면 MySQL 포트에 문제가있을 수 있습니다. 방금 서버를 Mac OS X 10으로 옮겼습니다.6 그리고 mysql_connect 가이 오류를주고있었습니다. /etc /php에 들어갑니다.INI 파일 및 기본 포트 번호를 3306으로 설정했습니다.
PHP.INI 파일은 PHP가 $ mysql_tcp_port 또는 /etc /services에서 mysql-tcp 항목을 사용하여 포트를 선택할 것이라고 제안하지만이 경우에는 그렇지 않습니다. /etc/서비스 내 컴퓨터의 서비스에는 3306이 나열되어 있지만 픽업되지 않았습니다.
문서화 된 기능이 작동하지 않는다는 점에서 일종의 버그 보고서입니다. 커뮤니티가 문제를 해결하는 방법을 결정할 때까지 이것을 삭제하지 마십시오. 이것은 고정하기위한 머리카락을 당기 운동 중 하나입니다.
13 년 전
#2006 : MySQL 서버와 같은 MySQL 오류가 발생하고 MySQL 서버가 사라지고 MySQL_Connect () 및 PCNTL_FORK ()를 사용하고있는 경우, Fork () Ed가 생성 된 각 자녀와 MySQL 서버에 다시 연결하고 있음을 Shure로 만드십시오.
각 어린이에 대해 동일한 MySQL 연결을 사용하고 있었고 "MySQL Server가 사라졌다"오류가 발생했기 때문에 며칠 동안 머리카락을 꺼 냈습니다.
간단한 예는 다음과 같습니다
$ link = mysql_connect ($ db_server, $ db_user, $ db_pass);
mysql_select_db ($ db_database, $ link));
$ pid = pcntl_fork ();
if ($ pid == -1)
// 오류 포킹 아이
elseif ($ pid) // 부모가 여기에 올 것입니다
> else // 아이는 * new * mysql connection a * new *.
// 4 번째 매개 변수없이 mysql_connect를 사용하는 경우
// 그러면 부모의 연결을 사용합니다. 하지만
// 자식이 죽으면 연결은 불가능합니다
// 부모도.
// 그래서 "true"를 네 번째 매개 변수로 기록하십시오.
$ newlink = mysql_connect ($ db_server, $ db_user, $ db_pass, true);
mysql_select_db ($ db_database, $ newlink));
// .
>
?>
15 년 전
[PHP DOT NET에서 DanBrown의 편집 :이 사용자가 설명하고있는 문제는 PHP의 여러 데이터베이스를 처리 할 때 일반적인 문제입니다. 설명에 대한 코드 끝에서 그의 의견에 유의하십시오.]]
내가 이것을 어려운 방법으로 배웠던 것 같습니다
// 마스터 DB 서버에 대한 연결을 설정합니다
mysql_connect (db_host, db_user, db_password);
mysql_select_db (db_name);
// 읽기 전용 슬레이브 클러스터에 대한 연결을 설정합니다
$ objmysql_read = mysql_connect (slave_db_host, slave_db_user, slave_db_password);
mysql_select_db (db_name, $ objmysql_read);
$ strsql = "col1, col2를 선택하십시오 . db_name . "." . "TBL1 여기서 1 = 1";
$ objrs = mysql_query ($ strsql, $ objmysql_read); // 노예의 데이터를 반환합니다
$ strsql = "삽입" . db_name . "." . "TBL1 (col1, col2) 값 (Val1, Val2)";
// 예상되는 동작, 마지막 명령문을 마스터 DB에 삽입하려면 읽기 전용 리소스를 명시 적으로 참조하지 않기 때문입니다. 대신, 마지막 연결은 첫 번째 연결과 같은 글로벌/익명 연결이 아니기 때문에 레코드를 마지막 연결에 삽입합니다. $ objmysql_read입니다.
// 모든 연결 리소스를 명시 적으로 정의하지 않는 한 클러스터 전체에서 동기화 된 DB를 벗어나게됩니다
11 년 전
MySQL Sever를 5로 업그레이드 한 후 5.5.5부터 21.0.9 Centos에서 내 WinXP는 오류 메시지와 함께 호스트와 연결할 수있는 것을 중지했습니다
'나쁜 악수'.
문제에 대한 최종 솔루션은 MySQL_Connect ()로 호출에서 mysql_client_ssl을 제거하는 것이 었습니다.
나는 이것을 버그로보고 할 것입니다.
14 년 전
원격 서버에 연결하려는 경우 여기에 잘못 될 수있는 몇 가지 사항이 있습니다. 아마도이 목록은 누군가에게 시간을 절약 할 것입니다
1. 원격 서버의 기술 지원에 연락해야 할 수도 있습니다
ㅏ. 방화벽을 통과 할 수 있는지 확인하십시오. 수신자 사이트의 CPANEL 원격 액세스 호스트 목록에 서버 번호가 나열되어있는 것만으로는 반드시 충분하지 않습니다. 서버 회사에 사물이 어떻게 설정되어 있는지에 따라 다릅니다
비. 데이터베이스 연결에 사용중인 포트 번호를 찾으려면 MySQL_Connect에서 사용하는 기본값이 아닐 수도 있습니다
씨. ODBC를 사용하는 경우 연결하려는 호스트는 ODBC 드라이버가 설치되었거나 없을 수도 있습니다. 그리고
디. 동적 IP에서 작업하는 경우 수용으로 설정되어 있거나 프록시를 사용해야 할 수도 있습니다. http : // forge를 참조하십시오.MySQL.com/wiki/mysql_proxy .
2. 공유 서버에서 직접 작업하는 경우 가입 문자로 전송 된 서버 번호는 아마도 원격 데이터베이스에 연결하는 데 사용해야하는 서버 번호가 아닐 것입니다. 해당 시스템의 가상 계정 서버 번호가 아닌 사이트에있는 시스템의 서버 번호가 필요합니다. 자신의 기술 지원에서 이것을 얻을 수 있습니다.
이 분석에 대해 Bluehost의 Jonathan Jones에게 감사합니다.