É necessário usar o PHP para se conectar ao MySQL?

Quando se trata de se conectar a um banco de dados MySQL, o PHP oferece uma solução conveniente e eficiente. Com o PHP, você não precisa baixar código adicional ou instalar plugins para se conectar ao MySQL. De fato, o PHP está pronto para se conectar ao MySQL imediatamente, tornando -o uma ferramenta poderosa para a conectividade do banco de dados.

Conectar o PHP ao MySQL é tão simples quanto seguir algumas etapas:

  1. Conecte -se a uma instalação do MySQL.
  2. Use o banco de dados MySQL certo.
  3. Envie consultas SQL para o banco de dados.
  4. Recuperar e lidar com os resultados.

Essas etapas servem como base para qualquer script PHP que interaja com um banco de dados. Esteja você criando tabelas, realizando pesquisas ou adicionando dados ao banco de dados, as duas primeiras etapas permanecem constantes.

Vamos dar uma olhada no processo de conexão com um banco de dados MySQL no PHP:

Para estabelecer uma conexão, seu script PHP precisa conhecer o host, nome de usuário e senha do banco de dados. Esta informação permite que o PHP inicie a conexão como você faria ao usar o cliente da linha de comando MySQL.

Comece criando um novo script PHP chamado “Connect.PHP “e insira as seguintes linhas:


Observe que se o seu banco de dados estiver em execução na mesma máquina que seus arquivos PHP e Web que servem, o nome do host do banco de dados normalmente será “localhost.”

O comando “mysql_connect” recebe o host, nome de usuário e senha do banco de dados como parâmetros e inicia a conexão. Se a conexão falhar, a função “dado” será usada para exibir uma mensagem de erro para impedir que o script continue. Caso contrário, o script exibe uma mensagem de conexão bem -sucedida.

Seguindo estas etapas, você pode conectar facilmente o PHP a um banco de dados MySQL e aproveitar o poder do MySQL em seus aplicativos da Web.

Perguntas frequentes:

1. Por que é conveniente usar o PHP para conectar -se ao MySQL?

O PHP está pronto para se conectar ao MySQL sem a necessidade de código ou plugins adicionais. Essa conveniência economiza tempo e esforço ao criar aplicativos da Web que exigem conectividade do banco de dados.

2. Posso usar o PHP para me conectar a um banco de dados MySQL remoto?

Sim, o PHP permite que você se conecte aos bancos de dados MySQL remotos, fornecendo o host, nome de usuário e senha apropriados. Apenas certifique -se de ter os direitos de acesso necessários e a conectividade de rede para estabelecer a conexão.

3. Quais são as etapas essenciais para conectar o PHP ao MySQL?

As etapas essenciais para conectar o PHP ao MySQL incluem o fornecimento do host, nome de usuário e senha do banco de dados, estabelecendo a conexão com o comando “mysql_connect” e lidando com possíveis erros usando a função “Die”. Uma vez conectado, você pode executar consultas SQL e lidar com os resultados retornados.

4. É possível usar o PHP para conectar -se a bancos de dados que não o MySQL?

Sim, o PHP suporta conexões com vários bancos de dados que não o MySQL, incluindo PostgreSQL, Oracle e Microsoft SQL Server. No entanto, as etapas e funções específicas podem variar dependendo do sistema de banco de dados para o qual você está se conectando.

5. Quão seguro é conectar o PHP a MySQL?

A segurança na conectividade do banco de dados depende de vários fatores, como proteger adequadamente o ambiente do servidor, usar senhas fortes e utilizar as melhores práticas para proteger dados confidenciais. O próprio PHP fornece funções e técnicas para impedir a injeção de SQL e outras vulnerabilidades de segurança, mas os desenvolvedores também devem implementar medidas de segurança adicionais para garantir a segurança geral do aplicativo.

6. Vários scripts PHP podem se conectar ao mesmo banco de dados MySQL simultaneamente?

Sim, vários scripts PHP podem se conectar ao mesmo banco de dados MySQL simultaneamente. No entanto, é importante gerenciar conexões e recursos de maneira eficaz para evitar conflitos e problemas de desempenho. Fechando as conexões de banco de dados adequadamente e o uso de técnicas de pool de conexões podem ajudar a otimizar o acesso ao banco de dados em ambientes multi-script.

7. Como posso solucionar erros de conexão ao usar o PHP e MySQL?

Ao encontrar erros de conexão, verifique o host fornecido, nome de usuário e senha para garantir sua precisão. Verifique se o servidor MySQL está em execução e acessível a partir do ambiente PHP. O relatório de erro também pode ser ativado no PHP para fornecer mensagens de erro mais detalhadas, ajudando a solucionar problemas e resolver problemas de conexão.

8. É possível conectar o PHP a vários bancos de dados MySQL?

Sim, o PHP permite que você se conecte a vários bancos de dados MySQL no mesmo script ou em diferentes scripts. Basta estabelecer conexões separadas usando parâmetros diferentes para cada banco de dados. Lembre -se de que o gerenciamento de várias conexões com eficiência é crucial para manter o desempenho e o uso de recursos.

9. Posso usar declarações preparadas para PHP com mysql?

Sim, o PHP suporta declarações preparadas, que fornecem uma maneira segura e eficiente de executar consultas SQL com dados fornecidos pelo usuário. Declarações preparadas ajudam a impedir ataques de injeção de SQL, separando a lógica de consulta da entrada de dados.

10. Existem alternativas ao PHP para se conectar ao MySQL?

Embora o PHP seja uma escolha popular para se conectar ao MySQL devido à sua simplicidade e ampla adoção, outras linguagens de programação, como Python, Java e C#, também fornecem bibliotecas e APIs para interagir com bancos de dados MySQL. A escolha da linguagem depende dos requisitos e preferências do projeto.

É necessário usar o PHP para se conectar ao MySQL

As constantes são digitadas em letras de todos os suportes. Caps não’T necessário, mas isso’é outro daqueles “fale como um programador PHP” coisas. Você quer que as constantes pareçam diferentes das variáveis, e usar todos os nomes de maiúsculas é uma maneira de fazer isso. Constantes também Don’t tem o $ antes do nome deles, que é mais uma maneira de diferenciar uma constante de uma variável.

PHP & MYSQL: O MANUAL DE MONTOS de Brett McLaughlin

Obter acesso total a PHP & MYSQL: o manual ausente e 60k+ outros títulos, com um teste gratuito de 10 dias de O’Reilly.

Também existem eventos ao vivo, cursos com curadoria por função de trabalho e mais.

Capítulo 4. Conectando PHP a MySQL

Agora que você’Vi um pouco do poder do PHP e MySQL, isso’é hora de reunir esses dois Juggernauts. Com muitas linguagens de programação, sempre que quiser conversar com um banco de dados, você deve baixar e instalar código extra ou instalar pequenos modelos de plug-in que dão suporte aos seus programas para conversar com esse banco de dados. Php isn’Ti assim; Ele está pronto para se conectar ao mysql a partir do momento em que você executa o php comando.

Mesmo que você’Comecei recentemente sua jornada para o domínio do PHP, você’estou pronto para usar um banco de dados de seus scripts. Você só precisa aprender alguns novos comandos e como lidar com os problemas que podem surgir quando você’está trabalhando com um banco de dados. Na verdade, você’vou construir um formulário simples que permite inserir o SQL e executá -lo no seu banco de dados MySQL. Quando você’re um programador PHP, você pode ir além do mysql ferramenta de linha de comando.

Então, para colocar uma cereja em cima do seu sundae imponente de Php e Mysql, você’Escrevo outro script. Este script receberá todas as informações dos formulários que você’Criei, adicione essas informações a um banco de dados e adicione mais um formulário para permitir que seus usuários pesquisem outro usuário pelo nome. Tudo isso em um capítulo? sim, de fato.

Escrevendo um script de conexão PHP simples

Não importa quão simples ou avançados seus scripts PHP, se eles conversarem com um banco de dados, eles’Começará com as mesmas etapas:

  1. Conecte -se a uma instalação do MySQL.
  2. USAR o banco de dados MySQL certo.
  3. Envie SQL para o banco de dados.
  4. Receba os resultados de volta.
  5. Faça algo com os resultados.

As etapas 3, 4 e 5 mudarão dependendo do que você’estar fazendo. Um script que cria tabelas parece um pouco diferente de um script que pesquisa nas tabelas existentes.

Mas aqueles primeiros dois passos – se conectam ao MySQL e usando o banco de dados certo – são sempre iguais, por mais que seja o seu script. Apenas pense, então: o código que você’estou prestes a escrever é o mesmo código que os programadores que ganham US $ 150 ou US $ 200 por hora estão escrevendo em algum lugar. (Eles’apenas escrevendo esse código em casas muito mais sofisticadas com robôs que os serviam gelado enquanto eles relaxam na piscina.)

Conectando -se a um banco de dados MySQL

Primeiro, você deve dizer ao seu script PHP como se conectar a um banco de dados. Esse processo está basicamente dizendo ao PHP para fazer o que você fez quando iniciou seu cliente de linha de comando MySQL (MySQL no Mac OS X). Quando você se conectou ao seu servidor da web’S Banco de dados, você provavelmente usou um comando como o Followng:

bmclaugh@akila: ~ $ mysql--host = dc2-mysql-02.Kattare.com --User = Bmclaugh -Password

Você precisa dessas mesmas informações para fornecer PHP para que ele possa se conectar: ​​seu host de banco de dados, seu nome de usuário e uma senha.

Inicie seu editor de texto e crie um novo script; chame-o conectar.php . Este script será o mais simples possível, porque tudo o que você precisa é se conectar ao seu banco de dados, USAR o banco de dados certo e, em seguida, execute uma amostra de consulta SQL para garantir que as coisas estejam funcionando corretamente.

No seu script, digite as seguintes linhas:

Erro de conexão ao banco de dados: " . mysql_error () . "

"); eco"

Conectado ao mysql!

"; ?>

Observação

Se você’Estando executando seu banco de dados na mesma máquina que seus arquivos PHP e Web que servem, seu nome de host de banco de dados geralmente é LocalHost. LocalHost é apenas uma maneira de dizer “a máquina local.”

Isto’é realmente tão simples! E como a maioria dos outros scripts de PHP você’Estive escrevendo, embora existam alguns novos comandos, você provavelmente já sabe quase exatamente o que’está acontecendo aqui.

Primeiro, aí’é um novo comando: mysql_connect . Este comando simplesmente recebe um host de banco de dados, um nome de usuário e uma senha e conecta. Isto’é exatamente como se você’está executando o seu mysql ferramenta e conectando -se a um banco de dados remoto.

Observação

Certifique -se de mudar seu.base de dados.Anfitrião, seu nome de USERN , e sua senha para os valores para seu próprio banco de dados.

Mas e quanto ao morrer pedaço? Parece um pouco horrível (como senhor das Moscas horrível, não Crepúsculo adolescente-angustoso). Na verdade, é um pouco desagradável: você usa morrer quando algo poderia dê errado em seu script. Imagine morrer dizendo, “Se meu código morrer, faça algo menos desagradável do que jogar um código de erro para o meu usuário. Nesse caso, morrer imprime uma mensagem de erro que venceu’t Scare Off Your Usuários.

Mas antes que você possa entender morrer , você tem que saber um pouco sobre o funcionamento interno de mysql_connect . Quando mysql_connect Executa, cria ou reutiliza uma conexão existente com o seu banco de dados. Em seguida, ele retorna essa conexão com seu programa PHP e disponibiliza todos os outros comandos php-para-mysql’aprenderei sobre em breve. Mas se mysql_connect pode’t Crie essa conexão – por exemplo, se o seu banco de dados não estiver’t correndo ou você’Tenho um anfitrião ou nome de usuário ruim – mysql_connect Retorna um valor muito diferente: falso .

E daí’está realmente acontecendo em seu script é algo assim:

 Mas isso é muito digitado, então o PHP permite reduzi -lo ao seguinte: Erro conectando ao banco de dados: " . mysql_error () . "

"); eco"

Conectado ao mysql!

"; ?>

Não apenas esse script é mais curto, mas vira as coisas um pouco. Basicamente diz, tente se conectar (usando mysql_connect ), e se o resultado não estiver’T verdadeiro (o ou parte do código), então morrer. morrer imprime uma mensagem de erro, mas também “morre.” Em outras palavras, ele termina seu script. Então se mysql_connect retorna falso , e morrer Executa, seu script vai sair. Seus usuários venceram’já vi o “Conectado ao mysql!” linha porque o script terá parado de correr. Isto’está morto no chão da sala do servidor, em busca de uma conexão de banco de dados de trabalho. (Veja a caixa em todos morre em algum momento para obter mais detalhes sobre o morrer comando.)

Não apenas isso, mas mysql_connect configura outra função quando pode’t conectar. Começa os erros que se deparou com a tentativa de conectar disponível através de outro comando, mysql_error . Então você pode ligar mysql_error Como parte do seu morrer declaração para mostrar o que realmente aconteceu.

Observação

Tecnicamente, mysql_connect, mysql_error , e morrer são todos exemplos de funções . Uma função é um bloco de código, geralmente com um nome atribuído a ele, que você pode ligar do seu próprio código sempre que precisar desse bloco. Isto’é muito mais rápido e melhor chamar uma função pelo nome do que reescrever o bloco de código que a função representa repetidamente.

Vestir’Não se preocupe com as funções por enquanto, embora. Basta usá -los como qualquer comando php antigo. Em pouco tempo, você não apenas entenderá melhor as funções, mas você’estarei escrevendo o seu próprio.

Se mysql_connect conecta sem problemas, ele retorna essa conexão. PHP irá pular o morrer linha e depois execute esta linha:

eco "

Conectado ao mysql!

";

Para ver este comando em ação, crie um formulário HTML simples e chame -o conectar.html. Você pode usar este HTML para fazer você ir:

    

PHP & MYSQL: o manual ausente

Exemplo 4-1

Teste de conexão SQL

Este script é tão simples quanto ele é: ele cria um formulário, solta um único botão no lugar e anexa esse botão ao seu novo conectar.php roteiro. Carregue seu formulário em um navegador (veja a Figura 4-1) e clique “Conecte -se ao MySQL.”

Felizmente, você vê uma das mensagens mais simples e felizes do seu crescente PHP e carreira de programação MySQL: você’está conectado! Confira a Figura 4-2 para obter a visão doce do sucesso.

Claro, você poderia ter tornado o Connect.html ainda mais simples. Você poderia ter abandonado toda a estrutura e referência de CSS. Mas quem quer se conectar a um banco de dados sem aparecer um pouco? Além disso, os clientes gostam de um site agradável e limpo. Você não precisa gastar horas no CSS, mas faz com que até as demos mais básicas pareçam profissionais, e seus clientes o amarão por isso

Figura 4-1. Claro, você poderia ter feito o Connect.HTML ainda mais simples. Você poderia ter abandonado toda a estrutura e referência de CSS. Mas quem quer se conectar a um banco de dados sem exibir um pouco? Além disso, clientes gostam de um site agradável e limpo. Você não’Temos que passar horas no CSS, mas fazer com que até as demos mais básicas pareçam profissionais, e seus clientes vão te amar por isso.

Essas três palavras significam que seu script PHP agora pode fazer praticamente qualquer coisa que você possa imaginar com seu banco de dados. Mas está faltando algo: como o MySQL sabe qual banco de dados é seu? Você ainda precisa dizer ao PHP qual banco de dados usar

Figura 4-2. Essas três palavras significam que seu script PHP agora pode fazer praticamente qualquer coisa que você possa imaginar com seu banco de dados. Mas lá’está faltando algo: como o mysql sabe qual banco de dados é seu? Você ainda precisa dizer ao PHP qual banco de dados para usar.

Selecionando o banco de dados para usar

Lá’é algo maravilhoso esperando ao redor do canto de programação agora: quase todo o mysql_ A família de funções funciona da mesma forma: você dá alguns valores e eles retornam algo útil. Se algo ruim acontecer, você geralmente volta falso ou um objeto inexistente (algo que a maioria dos programadores chama nulo ou nada ).

Então agora você precisa dizer ao mysql qual banco de dados seu script PHP quer usar. Lá’é uma função para isso: mysql_select_db .

Observação

Lá’é uma família extensa de mysql_ funções. Você pode querer marcar a página de documentação como favorita: www.php.rede/manual/en/ref.mysql.php. Se você ficar preso, vá até lá e veja se uma função pode fazer o que você precisa.

USUÁRIOS AVANÇADOS’ Clínica: Todo mundo morre em algum momento

Isto’é assustadoramente fácil de esquecer de adicionar aqueles morrer declarações para seus scripts PHP. PHP não’t exige, então’está perfeitamente feliz em aceitar algo assim:

mysql_connect ("banco de dados.hospedar.com "," nome de usuário "," senha ");

Que’é o mesmo código que você’já escrevi, exceto que deixa de fora o morrer papel.

Mas aqui’é a coisa: deixe isso morrer , E quando algo dá errado, seu script vai travar e fornecer algo que’é um erro realmente inútil ou algo tão enigmático que você pode’até dizer o que isso é. Por exemplo, se você deixar de fora morrer , e insira uma senha errada e execute seu script, você’receberá um erro semelhante ao seguinte:

Não é possível conectar ao servidor MySQL local através do soquete '/tmp/mysql.meia '(2)

Acredite ou não, essa mensagem de erro é realmente bastante informativa, pois as coisas acontecem com a falta morrer declarações. Acrescentando que uma linha de manuseio de erros pode fazer uma enorme diferença para um usuário quando as coisas dão errado.

De fato, quando você começa a construir aplicativos da web muito maiores e completos, você pode redirecionar seu usuário para uma página de erro bem formatada, completa com informações de contato para um administrador e um relatório de erro no estilo CSS. Mas nada disso é possível sem morrer .

Agora, descarregue com a energia do PHP, você já deve pensar que comete muito poucos erros. Você pode pensar que morrer é para amadores de classificação que não’t Escreva código sem falhas. Infelizmente, quando você’Acesse às 2 da manhã tentando atingir um prazo para que você possa ser pago, seu cérebro começa a se parecer bem … o de um amador de classificação. Todo mundo comete erros, e morrer (junto com outras técnicas de manuseio de erros) é um daqueles salva -vidas que ajudam a parecer preparado e profissional quando esses erros inevitáveis ​​ocorrem.

De fato, os programadores mais altos e mais bem pagos do mundo são os gurus de manipulação de erros. Ao mesmo tempo, eles’provavelmente não usando morrer . Eles’é mais provável de usar um sistema de manipulação de erros mais robusto; algo como o erro de lidar com você’Uso ll no capítulo 7. Por enquanto, porém, um uso saudável e liberal de morrer ajudará você a se acostumar a adicionar uma forma de manuseio de erros.

Você dá mysql_select_db um nome de banco de dados e – você adivinhou – ele USAR s esse banco de dados, ou retorna falso . Então atualize conectar.php para USAR o banco de dados certo:

Erro de conexão ao banco de dados: " . mysql_error () . "

"); eco"

Conectado ao mysql!

"; mysql_select_db ("seu nome-name") ou morra("

Erro de selecionar o banco de dados BMCLAUGH: " . mysql_error () . "

"); eco "

Conectado ao MySQL, usando o banco de dados BMCLAUGH.

"; ?>

Você já deveria ver o padrão. morrer Garanta que, se coisas ruins acontecerem, seu script relata um erro, seus usuários leem esse erro e depois o script sai. Se as coisas correrem bem, outra mensagem feliz deve ser impressa.

Experimente esta nova versão. Visita conectar.html novamente e tente se conectar (e agora USAR ) seu banco de dados. Você quer ver algo como a Figura 4-3. Em seguida: conversando SQL com seu banco de dados.

Mais uma vez, algumas palavras simples e coisas principais estão acontecendo nos bastidores. Seu script agora tem uma conexão com o MySQL e está usando o banco de dados certo

Figura 4-3. Mais uma vez, algumas palavras simples e as principais coisas estão acontecendo nos bastidores. Seu script agora tem uma conexão com o MySQL e está usando o banco de dados certo.

Mostre seu banco de dados’S Tabelas

Agora que você’Tenho uma conexão, e você’está ligado ao banco de dados certo, você deve ver exatamente o que você’Tenho que trabalhar com. Na sua ferramenta MySQL, uma das primeiras coisas que você fez foi ver quais mesas existiam e depois começará a criar tabelas. Lá’é um pouco mais de trabalho a fazer na criação de mesas, e você’Farei isso daqui a pouco, com um novo formulário HTML e um novo script.

Mas antes de mergulhar nisso, você pode facilmente ter seu script, veja quais tabelas estão disponíveis em seu banco de dados. Abra conectar.php Novamente, e adicione a seguinte linha:

 $ resultado = mysql_query ("show tabelas;"); ?>

Aqui’s Outra nova função PHP para MYSQL: mysql_query . Você’eu ficará muito, muito familiarizado com este; isto’é a chave para passar o SQL para o seu banco de dados. Esta função leva SQL, e você’dei um SQL realmente simples:

Mostrar mesas;

Este comando é exatamente Como digitar SQL em sua ferramenta de linha de comando.

Lidar com erros ao ver se seus resultados não são

Mas que tal morrer ? Que tal manuseio de erros? Lá’é nada disso, e agora você sabe que deveria haver. Mas lá’é algo diferente nessa linha: o que volta de mysql_query é enfiado em uma variável chamada $ resultado .

Então isso’está realmente $ resultado que você deseja examinar. Deve ter uma lista de tabelas, de Mostrar mesas , ou isso’está relatando um erro de algum tipo. E se isso’s relatando um erro, então $ resultado é falso, porque o mysql_ As funções retornam falsas quando lá’é um problema.

Você sabe como verificar se há um valor falso, para que você possa adicionar este código para lidar com problemas:

 if ($ resultado === false)   morrer("

Erro na listagem de tabelas: " . mysql_error () . "

"); > ?>

Agora, isso funciona, mas’realmente não é como a maioria dos programadores de PHP faz as coisas. O === é uma coisa bastante incomum a ser usada no PHP, pelo menos para verificar se uma variável é falsa. O que’é mais comum - e a maneira como isso’S geralmente é feito no PHP - é usar o operador de negação (também chamado de operador de bang), que é um ponto de exclamação: ! . Então, se você quiser ver se uma variável chamada $ alguma variável é falso, você pode dizer se (!$ alguma variável) . E essa ! diz algo como, “Veja se $ alguma variável é falso.”

Melhor ainda, pense em ! como sendo “não.” Então, o que você realmente quer dizer em seu código é, “Se não $ resultado , então morra.” Consequentemente, você pode reescrever seu código para ficar assim:

 se (!$ resultado)  morrer("

Erro na listagem de tabelas: " . mysql_error () . "

");> ?>

Este tipo de código é muito melhor PHP, e agora você’tenho algum problema coberto.

Observação

Pode parecer estranho ouvir sobre “do jeito que isso’S feito em php.” Se o código funcionar, então funciona, certo? Bem, sim ... mas você já ouviu alguém que’está apenas aprendendo o inglês falar? Muitas vezes, suas palavras estão corretas, mas a ordem, o uso e o idioma estão errados. Tente explicar por que mais de uma ovelha ainda é apenas “ovelha,” e você’Tenho a ideia.

Linguagens de programação são iguais. Lá’s escrever código que funciona, e ali’s escreva código que parece que você conhece o idioma. Às vezes isso é chamado de ser eloquente . Na verdade, existem ótimos livros para “falando corretamente” em JavaScript e Ruby chamados JavaScript eloquente (Marijn Haverbeke; sem prensa de amido) e Rubi eloquente (Russ Olsen; Addison Wesley). Isto’Vale a pena aprender não apenas como escrever PHP de trabalho, mas para escrever PHP que parece natural.

De fato, apenas para garantir que seu código lide com erros, altere sua consulta SQL para ter um erro de ortografia:

 $ resultado = mySQL_Query ("Tabelas mostradas;"); se (!$ resultado) < die("

Erro na listagem de tabelas: " . mysql_error () . "

");> ?>

Agora carregue conectar.html em um navegador e execute seu teste de conexão. A Figura 4-4 é semelhante ao que você deve ver: ainda um pouco enigmático, mas claramente um caso em que seu código percebeu que havia um problema e lidou com uma mensagem de erro em vez de um colapso maciço.

Lidar com erros a cada passo ao longo do caminho. Quanto melhor você lidar com os erros e, mais específicas são suas mensagens, mais fácil é descobrir o que deu errado com seu código. Isso significa código que funciona bem para seus usuários e que você pode corrigir facilmente quando os bugs surgem

Figura 4-4. Lidar com erros a cada passo ao longo do caminho. Quanto melhor você lidar&rsquo;está errado com seu código. Isso significa código que funciona bem para seus usuários e que você pode corrigir facilmente quando os bugs surgem.

Imprimindo seus resultados SQL

Erros são tratados, problemas são relatados e agora você pode finalmente lidar com o que&rsquo;está realmente dentro $ resultado Quando as coisas não&rsquo;Der errado. Infelizmente, as coisas ficam um pouco mais complicadas aqui. $ resultado Na verdade, não é do tipo php que você&rsquo;usei, ou mesmo um que você&rsquo;precisará aprender a trabalhar diretamente. Isto&rsquo;é algo chamado recurso , que é o PHP-Speak para uma variável especial que&rsquo;está relacionado a algo fora do PHP.

Pense assim: no caso de mysql_query , você&rsquo;pediu os resultados do SQL ao executar a consulta Mostrar mesas . Mas enquanto o PHP pode falar com o MySQL, realmente não&rsquo;eu sei como interpretar o SQL. Assim pode&rsquo;sabia disso $ resultado deve manter uma lista de linhas, cada uma das quais com um valor: um nome de tabela. Tudo o que sabe é que outra coisa - seu banco de dados MySQL - está recebendo uma consulta através do mysql_query função. E pense nisso: dependendo da consulta que você passa mysql_query, $ resultado pode manter linhas com várias informações, como um primeiro nome e URL do Facebook, ou apenas uma indicação de se um CRIAR A TABELA declaração funcionada ou não.

Portanto, nesses casos, você geralmente acaba com um recurso PHP. Esse recurso significa algo ; isto&rsquo;é apenas que o php não&rsquo;eu realmente sei o que é algo. Então seu PHP precisa de ajuda. O que precisa é algo que sabe sobre o MySQL e pode descobrir como trabalhar com $ resultado . Que&rsquo;é exatamente o que você ganha com outra função MySQL, mysql_fetch_row . Você passa esta função em um recurso retornado de mysql_query , E permite que você percorre cada linha nos resultados retornados da sua consulta SQL.

Aqui&rsquo;é o padrão básico:

  1. Escreva sua consulta SQL e armazene -a em uma string ou uma variável.
  2. Passe sua consulta em mysql_query e recupere um recurso PHP.
  3. Passar esse recurso para mysql_fetch_row Para recuperar as linhas de resultados, uma de cada vez.
  4. Percorrer dessas linhas e retire as informações necessárias.
  5. Compre um violão muito bom com todo o dinheiro que você&rsquo;realizar.

Observação

Esse último passo é opcional, mas altamente recomendado.

Você&rsquo;Tenho um recurso em $ resultado , Então agora passe para mysql_fetch_row , assim:

Aviso

Se você mudou seu SQL para Tabelas mostradas Para produzir um erro conforme descrito no manuseio de erros, vendo se seus resultados não são, certifique -se e altere -o de volta ao trabalho SQL: Mostrar mesas .

Mesmo que o php não&rsquo;eu sei o que fazer com o recurso retornado de mysql_query, mysql_fetch_row faz. Leva em seu $ resultado recurso e começa a cuspir linhas, uma de cada vez, em uma matriz.

E depois lá&rsquo;s isso enquanto Loop, que também é novo, mas provavelmente faz sentido para você já. A enquanto O loop continua a fazer um loop, desde que algo seja verdadeiro. Nesse caso, o loop continua fazendo loop enquanto $ ROW — Qual é a próxima fila de resultados da sua consulta SQL - está obtendo um valor de mysql_fetch_row ($ resultado) . Quando não há mais linhas de resultado, mysql_fetch_row não&rsquo;T devolva qualquer coisa, então $ ROW está vazio e o enquanto Loop diz, &ldquo;Tudo bem eu&rsquo;m feito. EU&rsquo;pare de fazer loop agora.&rdquo;

E você&rsquo;Tenho uma bela lista não ordenada ( ul ) pronto para cuspir cada linha, então lá&rsquo;é apenas uma coisa para adicionar:

Este código deve começar a parecer familiar novamente. Cada vez mysql_fetch_row retorna $ ROW , isto&rsquo;está realmente retornando uma matriz, algo que você&rsquo;Vejo antes (a variável $ _Request). Essa matriz tem todas as diferentes informações da sua consulta SQL. Para Mostrar mesas , que&rsquo;é apenas uma coisa, em $ line [0] : o nome da tabela. Em breve você&rsquo;Escreverei algumas consultas mais complexas e pode ser necessário pegar o valor em $ Row [1] ou $ Row [2] ou até $ Row [10] .

Então, neste caso, você volta $ ROW , Você pega o nome da tabela, colocando o primeiro item na matriz, no índice 0, e depois imprime -o com eco . Lá&rsquo;é apenas uma outra ruga aqui: aqueles aparelhos encaracolados dentro da corda passados ​​para eco. O que&rsquo;está acordado com aqueles?

Bem, você pode reescrever esta linha como esta:

Nada de errado lá, exceto todas as aspas extras e período para grudar strings juntos.

Observação

Principais pontos de nerd se você se lembrava de que as cordas de esmagamento eram chamadas de concatenação (combinando texto).

Mas o PHP é bastante experiente, e as pessoas que escreveram o idioma também são programadores. Eles perceberam, como você, que você&rsquo;está constantemente tendo que soltar variáveis ​​no meio das cordas. Então, em vez de terminar constantemente uma string e adicionar uma variável, você pode apenas embrulhar uma variável dentro de < >, e PHP imprimirá o valor dessa variável em vez de &ldquo;$ line [0]&rdquo;. É um código muito mais simples, e que&rsquo;é uma coisa boa.

Salvar conectar.php , revisitar conectar.html no seu navegador e veja o que as tabelas de você&rsquo;Eu recebi seu banco de dados. Figura 4-5 é conectar.php correndo contra um banco de dados com muitas mesas. Você pode ter apenas um ou dois, e isso&rsquo;está bem. Apenas certifique -se de ver uma lista de suas mesas.

As mesas de show acabam sendo bastante inúteis em um navegador muito rápido. Esse resultado pode parecer um grande número de tabelas, mas é provável que você esteja escrevendo aplicativos da Web com 20, 30 ou até 100 tabelas em um único aplicativo. Por enquanto, porém, é uma maneira muito fácil de garantir que seus scripts PHP estejam conversando com seus bancos de dados MySQL

Figura 4-5. Mesas de show acabam sendo bastante inúteis em um navegador muito rápido. Este resultado pode parecer um grande número de tabelas, mas você&rsquo;É provável que esteja escrevendo aplicativos da Web com 20, 30 ou até 100 tabelas em um único aplicativo. Por enquanto, porém, isso&rsquo;É uma maneira muito fácil de garantir que seus scripts PHP estejam conversando com seus bancos de dados MySQL.

Limpando seu código com vários arquivos

Mesmo se você não&rsquo;ainda percebi isso lá&rsquo;é algo problemático sobre o seu conectar.php roteiro. Veja as primeiras chamadas MySQL que você faz:

 mysql_connect ("seu.base de dados.hospedar",  "Seu nome de USERN", "Sua passanha") ou morra("

Erro de conexão ao banco de dados: " . mysql_error () . "

"); eco"

Conectado ao mysql!

"; mysql_select_db ("seu nome-name") ou morra("

Erro de selecionar o banco de dados BMCLAUGH: " . mysql_error () . "

"); eco"

Conectado ao MySQL, usando o banco de dados BMCLAUGH.

"; // E assim por diante. ?>

Você&rsquo;Representando manualmente seu host de banco de dados, seu nome de usuário, sua senha e seu nome de banco de dados em seu script. Agora suponha que você tenha 10 scripts e você&rsquo;está digitando isso 10 vezes. A chance de um erro de digitação é bem alta.

Não apenas isso, o que acontece quando você muda sua senha? Ou você atualiza para um melhor plano de hospedagem para lidar com todo o tráfego da web que seus aplicativos estão gerando e precisa alterar seu host de banco de dados? Você&rsquo;Tenho que rastrear todos os lugares em que você coloca essas informações, em cada script php. Que&rsquo;é um pesadelo e impede você de realmente escrever um novo código e ganhar mais dinheiro. Não é bom.

Você precisa de uma maneira de resumo out aquelas informações. Abstração é um termo de programação que significa ocultar a implementação, a maneira como algo (como uma senha) funciona, a partir dos programas que a usam. Você basicamente tem um símbolo, ou um nome, e esse nome se refere a outra coisa com muito mais detalhes. E mesmo que esse detalhe mude, o nome ainda aponta para a coisa certa.

Isto&rsquo;é como dizer &ldquo;Leigh,&rdquo; e significando minha esposa, sem ter que dizer, &ldquo;Aquela mulher quente de 34 anos com cabelos loiros curtos e grandes pernas.&rdquo; E a beleza de &ldquo;Leigh&rdquo; é todo aniversário, você pode continuar dizendo, &ldquo;Leigh,&rdquo; Em vez de mudar sua descrição.

Substituindo valores do tipo manual por variáveis

Então, suponha que você queira que seu código se pareça mais com isso (na verdade, você realmente fazer quero que pareça mais assim):

 mysql_connect ($ database_host, $ nome de usuário, $ senha) ou morra("

Erro de conexão ao banco de dados: " . mysql_error () . "

"); eco"

Conectado ao mysql!

"; mysql_select_db ($ database_name) ou morra("

Erro de selecionar o banco de dados BMCLAUGH: " . mysql_error () . "

"); eco"

Conectado ao MySQL, usando o banco de dados BMCLAUGH.

"; // E assim por diante. ?>

Todos vocês&rsquo;estar fazendo é escrever algo que se parece um pouco com uma variável no lugar da manutenção do nome de usuário ou do banco de dados. Agora você pode definir essas variáveis ​​acima do seu código de conexão:

 $ database_host = "seu.base de dados.hospedar";  $ userName = "seu nome de USERN";  $ senha = "Sua passanha";  $ database_name = "seu nome-name"; // Código de conexão do banco de dados ?>

Mas isso é realmente muito melhor? Ainda não; você&rsquo;ainda recebi esses mesmos valores tonificados à mão em seu script. Você quer enfiar os valores em um arquivo para que nenhum ser humano tenha que digitá -los. Leia.

Abstrair valores importantes em um arquivo separado

Seu objetivo é obter esses valores de conectar.php , em algum lugar que todos os seus scripts PHP podem acessá -los sem digitar de você. Abra um novo arquivo e ligue para app_config.php . Agora deixe suas variáveis ​​neste novo arquivo:

Observação

Certifique -se e salve app_config.php Em algum lugar que faz sentido para toda a sua aplicação&rsquo;s scripts para acessá -lo. Neste livro&rsquo;S Exemplos, app_config.php está na raiz do site, sob scripts/ . Então, se você&rsquo;re no CH04/Scripts/ diretório, você&rsquo;D Access este arquivo em ../../scripts/app_config.php , ou [site_root]/scripts/app_config.php . Você pode salvar o arquivo onde quiser, desde que acerte o caminho em seus scripts PHP que o referenciam.

Quando você muda para uma versão de produção do seu aplicativo, você provavelmente deseja colocar esse arquivo fora da raiz do site. Dessa forma, os usuários da web podem&rsquo;t Basta digitar o caminho para o seu script de configuração e obter todas as suas senhas. Como alternativa, você pode adicionar segurança a este diretório, embora simplesmente tirá-lo dos diretórios que servem na Web geralmente é geralmente mais fácil.

Agora, você pode ter todos os seus diferentes scripts PHP usam essas variáveis ​​compartilhadas. Altere uma variável aqui em app_config.php , E essa mudança afeta todos os seus scripts PHP que usam essas variáveis ​​compartilhadas.

Mas como você realmente acessa essas variáveis? Volte para conectar.php , e remova onde você definiu essas variáveis. Se você tentar acessar conectar.php através conectar.html Agora, porém, você&rsquo;receberá um erro desagradável, como mostrado na Figura 4-6.

Você definiu suas variáveis ​​em app_config. PHP, mas Connect.php não sabe disso. Você precisa dizer ao seu script de conexão que ele não deve ser executado até que ele carregue app_config.php. Em seguida, as coisas se comportarão, porque as variáveis ​​Connect.php usam serão definidas corretamente

Figura 4-6. Você definiu suas variáveis ​​em app_config. PHP, mas conecte -se.PHP não&rsquo;sabia disso. Você precisa dizer ao seu script de conexão que não deveria&rsquo;t rodar até carregar app_config.php. Então as coisas vão se comportar, porque as variáveis ​​se conectam.Os usos do PHP serão definidos corretamente.

O erro ocorre porque conectar.php agora não tem ideia do que $ nome de usuário ou $ senha refere-se a. Você precisa informar o PHP que, antes de tentar fazer qualquer coisa em conectar.php , isto&rsquo;é necessário carregar app_config.php . E essa&rsquo;S (quase) exatamente o que você digita em seu script:

 exigir '../../scripts/app_config.php '; // Código de conexão do banco de dados ?>

Agora, o PHP carrega o arquivo ../../scripts/app_config.PHP antes Ele executa o seu mysql_connect função. Com efeito, exigir diz, &ldquo;Ei php, se você puder&rsquo;T carregue o arquivo i&rsquo;estou dando, depois jogue um erro desagradável, porque nada mais vai funcionar.&rdquo;

Aviso

Verifique se o caminho e o nome do arquivo que você dá exigir combina onde você realmente coloca app_config.php , ou você&rsquo;verei o erro que exigir produz de perto e pessoal.

Tente executar seu script de conexão novamente e você deve ver sua listagem de tabela, o que significa que as coisas estão funcionando bem novamente.

Sob o capô: requer ou incluir?

Lá&rsquo;é outro comando em php que&rsquo;é muito semelhante a exigir : incluir. incluir faz exatamente o quê exigir faz em termos de dizer ao PHP para carregar outro arquivo. A diferença é que se esse arquivo puder&rsquo;não ser carregado, incluir Apenas emite um aviso e permite que o PHP continue executando os comandos posteriores em seu script. Em outras palavras, exigir completamente fecha as coisas, mas incluir Deixe seu script continuar.

Mas aqui&rsquo;é a coisa. Você é realmente vou se incomodar em incluir um arquivo se você não&rsquo;não preciso desse arquivo? Na maioria dos casos, provavelmente não. E você&rsquo;está incluindo esse arquivo porque você precisa dele; você exigir Esse arquivo para executar. Então, em quase todas as situações, você deve usar exigir Para pegar outro arquivo, não incluir . Se algo der errado, você quer saber sobre isso. Você não&rsquo;quero o restante do seu código em execução, porque ele&rsquo;provavelmente está apenas indo errar de qualquer maneira.

As variáveis ​​variam, mas as constantes permanecem constantes

Lá&rsquo;é apenas mais um pequeno problema irritante com seu código: você&rsquo;ainda estou usando variáveis ​​para seu nome de usuário e senha, juntamente com o host e o nome do banco de dados. E o que&rsquo;s uma variável? Algo que varia ou muda. Consequentemente, o PHP alegremente permite escrever o seguinte código em conectar.php :

mysql_connect ($ database_host, $ nome de usuário, $ senha) ou die ("

Erro de conexão ao banco de dados: " . mysql_error () . "

"); // Isso é permitido, mas alguns mojos $ senha =" hijinks ";

Então, o que acontece quando algum outro script - que também requer app_config.php —Tries para se conectar com mysql_connect ? Isto&rsquo;está indo usar $ senha , mas agora $ senha isn&rsquo;t correto mais. Isto&rsquo;s definido como &ldquo;Hijinks,&rdquo; E o caos se seguirá.

O que você realmente quer é para esses valores em app_config.php ser constante e nunca mudar. Você pode fazer isso com o especial definir função. Abra app_config.php e altere seu código:

Definir ("Database_host", "seu.base de dados.hospedar"); define ("Database_username", "seu nome de USERN"); define ("database_password", "sua passanha"); define ("database_name", "seu nome-name"); ?>

Você define o nome de uma constante e o valor para essa constante, e o PHP cria uma nova constante. Dessa forma, você pode digitar Database_host em seu código e php realmente vê &ldquo;seu.base de dados.hospedar&rdquo;. Perfeito! E como isso é uma constante, pode&rsquo;não ser alterado em qualquer lugar ao longo da linha.

As constantes são digitadas em letras de todos os suportes. Caps não&rsquo;T necessário, mas isso&rsquo;é outro daqueles &ldquo;fale como um programador PHP&rdquo; coisas. Você quer que as constantes pareçam diferentes das variáveis, e usar todos os nomes de maiúsculas é uma maneira de fazer isso. Constantes também Don&rsquo;t tem o $ antes do nome deles, que é mais uma maneira de diferenciar uma constante de uma variável.

Agora você precisa fazer algumas mudanças rápidas para conectar.php Para usar esses novos nomes capitalizados de constantes:

 mysql_connect (database_host, database_username, database_password) ou morra("

Erro de conexão ao banco de dados: " . mysql_error () . "

"); eco"

Conectado ao mysql!

"; mysql_select_db (database_name) ou morra("

Erro de selecionando o banco de dados " . NOME DO BANCO DE DADOS . mysql_error () . "

"); eco "

Conectado ao MySQL, usando o banco de dados " . NOME DO BANCO DE DADOS . "

"; // A bondade que administra a consulta SQL. ?>

Aviso

Você pode&rsquo;t Use o Dentro de suas citações para imprimir constantes. Isto&rsquo;s somente quando você cercava uma variável (que começa com $ ) com que PHP imprime o valor dessa variável. Em vez disso, use a abordagem normal de concatenação de string, onde você termina sua string e adicione as constantes usando o ponto (.), conforme discutido sobre a combinação de texto.

Tentar conectar.php de novo. Você deve obter uma lista perfeitamente boa de nomes de tabela. Mas desta vez você&rsquo;Consegui constantes para suas informações importantes, escondidas com segurança em um arquivo separado de conectar.php .

Observação

Isto&rsquo;também é uma boa ideia adicionar alguma segurança adicional a app_config.php , e quaisquer outros scripts que contenham valores especiais, como senhas. Você pode definir as permissões no arquivo para ser mais restritivo ou mover o arquivo para algum lugar para que seu script PHP possa acessar, mas seus usuários da web podem&rsquo;t. Peça ajuda à sua web ou servidor se você&rsquo;não tenho certeza de como fazer isso.

Tempo de design: comece pequeno, adicione pequeno, termine pequeno

Você pode estar se perguntando por que não poderia&rsquo;Acabei de começar com app_config.php , e a versão concluída e de trabalho de conectar.php . Ou, no mínimo, você poderia ter acabado de retirar todo o código de conexão do banco de dados em conectar.php de uma só vez, e depois fez o código de impressão de uma vez. Isn&rsquo;t que como os desenvolvedores reais escrevem código?

Bem, sim e não. Muitos desenvolvedores escrevem código como esse. Eles digitam 10 ou 20 ou 50 linhas de código em seu script e depois experimentam. Muitas coisas vão quebrar, porque os desenvolvedores digitam muito rápido e cometem erros. Mas então eles&rsquo;LL consertará cada problema, um a um por um. E para muitos desenvolvedores, isso&rsquo;está bem.

Mas aqui&rsquo;é a coisa: isso&rsquo;não é uma maneira muito eficiente de trabalhar. Além disso, você&rsquo;geralmente focado na última etapa (como imprimir as mesas) e, portanto, você pode não gastar muito tempo descobrindo a melhor maneira de lidar com as etapas intermediárias. Você pode não usar Para simplificar a afirmação que imprime $ line [0] , ou você pode pular um morrer porque você&rsquo;está pensando na saída HTML, não lidando com o caso em que a senha do banco de dados é&rsquo;t certo.

Os melhores desenvolvedores trabalham em pedaços muito pequenos de código de cada vez. Eles testam esse código e depois passam para outra coisa. De fato - e isso vai um pouco além deste livro, mas&rsquo;ainda é importante - muitos desenvolvedores de elite realmente escrevem testes antes Eles escrevem mais alguma coisa. Eles escrevem esses testes, e os testes obviamente falham, porque eles não têm&rsquo;t escrevi qualquer código. Então eles escrevem código suficiente para passar no teste e depois escrevem outro teste.

Este método pode não fazer muito sentido no início. Por que escrever testes para código que não&rsquo;t existe? Aqui&rsquo;s o que&rsquo;S realmente nozes: muitas vezes, essa abordagem resulta em mais código de teste do que o código de aplicativo real! Isto&rsquo;é muito trabalho, e isso&rsquo;é tudo com base na ideia de que você deve escrever um código suficiente para fazer uma coisa funcionar de cada vez.

Mas aqui&rsquo;é a grande revelação e por que esses desenvolvedores de elite são elite: esta abordagem de teste primeiro resulta em melhor código. Trabalhar pequeno, do início ao fim, significa que você&rsquo;está se concentrando em uma coisa e fazendo isso muito bem. Você não está&rsquo;t correndo para outra coisa. E isso significa o que você&rsquo;estar trabalhando é sólido e funciona. Essa abordagem leva mais tempo no começo, mas resulta em código sólido que quebra com muito menos frequência.

Então leve seu tempo e trabalhe pequeno. Seu código será melhor e seus clientes o amarão porque seu código ainda está em execução enquanto eles&rsquo;Re no telefone tentando obter ajuda com um aplicativo quebrado de &ldquo;Os outros caras.&rdquo;

Construindo um corredor básico de consulta SQL

Agora que você pode se conectar ao SQL, você&rsquo;estou pronto para assumir algo mais ambicioso: construindo sua própria versão de uma ferramenta de linha de comando mysql. Claro, você&rsquo;RE Um desenvolvedor e programador PHP agora, então mentalmente arranhões &ldquo;linha de comando&rdquo; e substitua -o por &ldquo;baseada na Web.&rdquo;

Acontece que você&rsquo;já tenho a maioria das ferramentas que você precisa. Você pode criar facilmente um formulário HTML que permite que você e seus usuários digitem uma consulta SQL, você sabe como se conectar ao MySQL e selecionar um banco de dados, e você pode executar uma consulta. Tudo isso&rsquo;A esquerda é descobrir como interpretar esse recurso PHP que mysql_query retorna quando isso&rsquo;não é uma lista de nomes de tabela.

Criando um formulário HTML com uma grande caixa vazia

Antes de chegar mysql_query e seus resultados, porém, comece com o que você sabe: um formulário html. Mantenha as coisas simples por enquanto e apenas crie um formulário com uma única área de texto na qual você pode digitar consultas e alguns botões básicos.

Abra seu editor de texto e crie Queryrunner.html:

    

PHP & MYSQL: o manual ausente

Exemplo 4-2

SQL Query Runner

Digite sua consulta SQL na caixa abaixo:


Inicie seu navegador favorito e verifique se as coisas parecem figura 4-7.

Quem disse que você não gastaria muito tempo escrevendo HTML e CSS quando se tornou um programador de web de pleno direito? Mesmo com um corredor básico de consulta SQL, boa estrutura e estilo fazem uma enorme diferença na apresentação e como é fácil atualizar seu código

Figura 4-7. Quem já disse que você não&rsquo;T gasto bastante tempo escrevendo HTML e CSS quando você se tornou um programador de web de pleno direito? Mesmo com um corredor básico de consulta SQL, boa estrutura e estilo fazem uma enorme diferença na apresentação e como é fácil atualizar seu código.

Conectando ao seu banco de dados (novamente)

Você sabe o que&rsquo;s Próximo: você precisa se conectar ao MySQL e depois USAR Seu banco de dados. Esse código deve estar bastante familiarizado até agora; Abra run_query.php e vá trabalhar:

Erro de conexão ao banco de dados: " . mysql_error () . "

"); eco"

Conectado ao mysql!

"; mysql_select_db (database_name) ou die ("

Erro de selecionando o banco de dados " . NOME DO BANCO DE DADOS . mysql_error () . "

"); eco"

Conectado ao MySQL, usando o banco de dados " . NOME DO BANCO DE DADOS . "

"; ?>

Mas espere ... isso é familiar. Você&rsquo;Escrevi este código antes, novamente na seleção do banco de dados para usar e, de fato, você deve escrevê -lo toda vez que se conectar ao MySQL. Esse tipo de duplicação não é&rsquo;T bom. Que&rsquo;é por isso que você mudou suas constantes de banco de dados para app_config.php : Você queria poder manter o código sempre o mesmo em um único lugar, em vez de dez ou cem lugares.

Você&rsquo;Vi como é fácil exigir um arquivo (abstraindo valores importantes em um arquivo separado) e puxe alguns valores constantes. Você pode fazer o mesmo com o seu código de conexão do banco de dados. Abra um novo arquivo e ligue para Database_connection.php . Salve este novo script ao lado de app_config.php , e digite o seguinte código:

Erro de conexão ao banco de dados: " . mysql_error () . "

"); eco"

Conectado ao mysql!

"; mysql_select_db (database_name) ou die ("

Erro de selecionando o banco de dados " . NOME DO BANCO DE DADOS . mysql_error () . "

"); eco"

Conectado ao MySQL, usando o banco de dados " . NOME DO BANCO DE DADOS . ".

"; ?>

Observação

Verifique se o seu caminho para app_config.php combina onde você armazenou esse arquivo. Se você&rsquo;estar salvando Data-Base_Connection.php no mesmo diretório que app_config.php , Você só precisa do nome do arquivo, sem caminhos de diretório.

Agora você&rsquo;Consegui todo o seu código de banco de dados bem escondido, o que significa que você pode revisar radicalmente run_query.php :

Como&rsquo;s que para código curto? Observe também que você não tem mais um motivo para exigir app_config.php . Seu script exige Database_connection.php , e isso&rsquo;s Data-Base_Connection.php que lida com trazendo app_config.php . Seu código está muito melhor e mais limpo agora.

Só para garantir que isso funcione, você deve visitar o seu Queryrunner.html página e clique em Executar consulta. Você deve obter algo como a Figura 4-8-tudo sem nada além de um único exigir em seu script principal!

Pode parecer estranho escrever um script que (pelo menos até agora) não faz nada mais do que exigir outro script. Na verdade, quanto mais confortável você obtém codificação, mais você favorecerá esse tipo de reutilização. Você deseja escrever um novo código suficiente para realizar o trabalho. Se você pode reutilizar 100 ou 1.000 linhas de código existente, deve

Figura 4-8. Pode parecer estranho escrever um script que (pelo menos até agora) não faz nada mais do que exigir outro script. Na verdade, quanto mais confortável você obtém codificação, mais você&rsquo;eu favorecerá esse tipo de reutilização. Você quer escrever um novo código suficiente para fazer o trabalho. Se você pode reutilizar 100 ou 1.000 linhas de código existente, então você deve.

Executando seu usuário&rsquo;S SQL Query (novamente)

Neste ponto, você finalmente consegue combinar o que sabe sobre o PHP e o que sabe sobre o SQL. Você já tem algo que o usuário coloca na grande área de texto em seu formulário através do $ Solicitação Variável, que, como você se lembra, é uma matriz (a variável $ _Request). E você também pode usar mysql_query Para executar uma consulta.

Você só precisa juntar essas duas coisas:

Basta pegar o campo apropriado a partir da entrada do seu formulário HTML, passe para mysql_query , e você&rsquo;eu é bom ir. Você pode passar no recurso PHP retornado, $ resultado , para um manuseio de erros se declaração, e finalmente para mysql_fetch_row Para imprimir os resultados da consulta.

Pergunta freqüente: por que não abstrair a função mysql_query?

Você deve ter notado que, assim como está se conectando constantemente ao MySQL - com o mesmo nome de usuário e senha, repetidamente - e selecionando um banco de dados - geralmente o mesmo banco de dados, repetidamente - você&rsquo;estará chamando mysql_query , de novo e de novo e de novo. Então, por que não colocar isso em outro arquivo e exigir esse arquivo?

O motivo está ali no código que você escreveu sobre como executar seu usuário&rsquo;S SQL Query (novamente): o que você passa para mysql_query vai mudar quase toda vez que você o chama. Por exemplo, em conectar.php (Conectando -se a um banco de dados MySQL), você passou na consulta Mostrar mesas para isso; Agora você&rsquo;está passando uma consulta do campo de formulário em Queryrunner.html. Mesmo que você&rsquo;está chamando mysql_query repetidamente, o que você&rsquo;estar dando essa função está mudando, então&rsquo;não vai ajudá -lo a tirar essa função de seus scripts principais.

Você pode se mover mysql_query fora do seu script principal e passa a ele a parte da declaração que continua mudando - a consulta SQL. Você&rsquo;D Preciso criar uma função personalizada que retire sua consulta do seu script e mãos principais que a consulta para mysql_query . Então quando mysql_query Terminado em execução, a função personalizada precisaria passar de volta qualquer coisa que voltasse ao seu script principal.

Isso pode parecer um bocado e muito trabalho. Isto&rsquo;é realmente muito fácil, e quando você começa a escrever suas próprias funções - algo você&rsquo;estarei fazendo no capítulo 8 - você&rsquo;D não tem nenhum problema em fazê -lo. Mas o que você ganharia? Você&rsquo;D ainda tenho que passar em uma consulta e recuperar uma resposta. Você&rsquo;Na verdade, não ganha nada ao construir sua própria função; basicamente substituiria mysql_query , Mas você não&rsquo;t Obtendo qualquer funcionalidade extra, e não seria&rsquo;t Adicionar qualquer proteção contra mudanças ou qualquer coisa assim ao seu código.

Agora, antes de ir pensar que você não deveria&rsquo;Não se preocupe com esse tipo de coisa, tome um minuto. Pensamento, &ldquo;Posso puxar esse código para outro arquivo geral? Devo fazer disso uma função personalizada?&rdquo; é uma coisa muito boa! Você quer pensar assim, mesmo que você decidir - como é o caso aqui - que&rsquo;s não uma coisa boa. Quanto mais você rola novas idéias e maneiras de abordar seu código, melhor um programador você&rsquo;Serei. Portanto, continue fazendo essas perguntas a si mesmo; Apenas Don&rsquo;tenho medo de responder suas próprias perguntas com um, &ldquo;Não, isso&rsquo;não é uma ótima ideia em esse caso.&rdquo;

O script parece muito bom, então agora você&rsquo;estou pronto para realmente tentar as coisas.

Inserindo sua primeira consulta baseada na Web

Você provavelmente não&rsquo;T tenho muito em seu banco de dados neste momento, então comece criando uma nova tabela chamada URLs . Aqui&rsquo;é o SQL você&rsquo;precisar:

Crie URLs de tabela (id int, URL Varchar (100), Descrição Varchar (100));

Claro, desde que você&rsquo;Tenho uma bela área de texto grande, você também pode espalhar isso:

Crie URLs de tabela (id int, URL Varchar (100), Descrição Varchar (100))

De qualquer maneira, você quer um formulário que se parece com a Figura 4-9.

Usar uma textarea aqui permite que seus usuários entrem no SQL, como quiserem. É uma coisa pequena, mas esses pequenos pedaços de flexibilidade e design centrado no usuário tornam seus formulários da Web muito mais agradáveis ​​de usar. Você não gostaria de escrever uma grande instrução SQL longa em uma caixa de entrada gigante em uma linha, então por que seus usuários iriam?

Figura 4-9. Usando uma textarea aqui permite que seus usuários entrem no SQL, como gostar. Isto&rsquo;é uma coisa pequena, mas esses pequenos pedaços de flexibilidade e design centrado no usuário tornam seus formulários da web muito mais agradáveis ​​para usar. Você não&rsquo;quero escrever uma grande instrução SQL longa em uma caixa de entrada gigante em uma linha, então por que seus usuários iriam?

Agora clique em Run Consulta. O que você conseguiu? Bem, você&rsquo;provavelmente está olhando para uma tela surpreendente, como a mostrada na Figura 4-10.

Às vezes, a pior mensagem de erro possível não é uma mensagem de erro. Nada aqui ajuda você a ver o que deu errado com seu script. Em casos como esse, uma mensagem de erro ajudaria, não causaria frustração

Figura 4-10. Às vezes, a pior mensagem de erro possível não é uma mensagem de erro. Nada aqui ajuda você a ver o que deu errado com seu script. Em casos como esse, uma mensagem de erro ajudaria, não causaria frustração.

Bem, o que aconteceu? Se você quer realmente ficar confuso, clique no botão de volta no seu navegador e execute o seu CRIAR consulta novamente. Você&rsquo;verei uma mensagem como a mostrada na Figura 4-11.

Primeiro, você não tinha nada, e agora um erro. O que está acontecendo? Pior ainda, embora você saiba que tem um erro, qual é o problema real? Ainda há muito trabalho a fazer aqui

Figura 4-11. Primeiro, você não tinha nada, e agora um erro. O que&rsquo;está acontecendo? Pior ainda, embora você saiba que tem um erro, qual é o problema real? Lá&rsquo;ainda é muito trabalho para fazer aqui.

A primeira vez que você correu o CRIAR A TABELA Consulta sobre fazer tabelas com CREATE, você não tem nada - nenhum resultado. Na próxima vez, MySQL diz a você o URLs Tabela já existe! De fato, se você pular para sua ferramenta de linha de comando, você verá que sim, a tabela faz existe em seu banco de dados:

MySQL> Descreva URLs; +-------------+--------------+------+-----+---------+-------+| Campo | Tipo | Nulo | Chave | Padrão | Extra | +-------------+--------------+------+-----+---------+-------+| id | int (11) | Sim | | Nulo | | | url | Varchar (100) | Sim | | Nulo | | | Descrição | Varchar (100) | Sim | | Nulo | | +---------------+--------------+------+-----+---------+-------+3 linhas no set (0.00 seg)

Olhe cuidadosamente para o seu código novamente:

O se (!$ resultado) O bloco de código não está funcionando, tão claramente $ resultado voltou como algo diferente de falsidade. Mas o enquanto O loop nunca correu; você nunca viu nenhum resultado.

Mas espere um segundo. Sua consulta foi uma CRIAR consulta. Quais linhas seriam devolvidas desse tipo de consulta? Lá não&rsquo;não serem linhas, porque você não estava&rsquo;t pedindo linhas. Você estava apenas pedindo ao MySQL para criar uma tabela; De fato, um lugar para colocar linhas.

Lidando com consultas que não&rsquo;t Selecione informações

O segredo aqui é que mysql_query está feliz em apreciar um CRIAR declaração. Até faz o que você perguntou, e é por isso que a segunda vez que você entrou nessa consulta, MySQL deu um erro, dizendo que o URLs Tabela já foi criada. Quando mysql_query recebe uma declaração de criação, ele retorna falso Se houve um erro - que seu script lida - mas verdadeiro se houver&rsquo;não é um erro. E se lá&rsquo;não é um erro, não&rsquo;T Retorno todas as linhas . Você recebe um verdadeiro valor em $ resultado , Mas nada mais. E essa&rsquo;está onde as coisas deram errado.

Quando mysql_query recebe a maioria das declarações SQL que não&rsquo;t Selecione dados, como criar, inserir, atualizar, excluir, soltar e alguns outros, apenas retorna verdadeiro (se as coisas funcionassem) ou falso (se eles não&rsquo;t).

Observação

Alguns desses comandos SQL, como ATUALIZAR e EXCLUIR , Pode parecer novo para você. Vestir&rsquo;Não se preocupe, embora. Eles fazem exatamente como eles parecem: ATUALIZAR atualiza as informações em uma tabela e EXCLUIR remove. E quando você precisa usar essas funções neste livro, você&rsquo;terá muito mais detalhes sobre exatamente como usar cada um deles.

Felizmente, agora que você sabe o que&rsquo;está acontecendo, isso&rsquo;não é muito difícil de lidar com o problema. Você só precisa do seu script para descobrir se a sequência de consulta SQL que o usuário fornecia tem uma dessas palavras especiais. Nesse caso, você deve lidar com isso de maneira diferente. E isso acontece que você&rsquo;é bastante confortável em pesquisar através de strings.

Então pense isso; O que você realmente quer é algo assim:

  1. Pegue o usuário&rsquo;S Consulta do formulário HTML.
  2. Passe a consulta em mysql_query , e armazenar o resultado em uma variável.
  3. Determinar se o resultado é falso, o que é ruim, independentemente do tipo de SQL que foi passado.
  4. Se o resultado não for falso, veja se a consulta possui uma das palavras -chave especiais: Criar, inserir, atualizar, excluir ou soltar. (Existem outros, mas esses são os mais comuns para verificar.)
  5. Se a consulta tiver uma dessas palavras especiais, veja se o resultado da execução da consulta era verdadeiro e que o usuário saiba.
  6. Se a consulta não tiver uma dessas palavras, tente imprimir as linhas do resultado como você&rsquo;já estou fazendo.

Você&rsquo;já tenho muito desse código, então você precisa adicionar apenas um se (ou talvez alguns se s, na verdade), e alguns pesquisando:

$ 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; >>>>>

Aviso

Certifique-se de usar esse sinal de triplo equais ( === ) na tua se declarações para verificar se $ localização é falso .

Este código pode parecer complicado, mas&rsquo;S direto se você passar por ele linha por linha. Basicamente, você tem o mesmo se declaração, repetida repetidamente, com cada um com outro aninhado se declaração:

$ location = strpos ($ query_text, "Search_string"); if ($ location === false) < // Try again with another SEARCH_STRING >

Finalmente, se todo o se As declarações falham, então você não&rsquo;t Criar, inserir, atualizar, excluir , ou DERRUBAR Em qualquer lugar da sequência de consultas:

// Esta é a instrução IF 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; >

Mas por que isso é tão complexo? O problema aqui é que você realmente deseja pesquisar o usuário&rsquo;s string de consulta, não apenas para uma única palavra correspondente, como CRIAR ou INSERIR , Mas para várias palavras correspondentes. Que&rsquo;é um pouco complicado, então você&rsquo;Tenho que trabalhar com uma chamada para strpos de uma vez.

Observação

Certifique -se de entender este código, mas não&rsquo;T fico muito apegado a isso. Isto&rsquo;é realmente feio, e no próximo capítulo, você&rsquo;vou adicionar uma ferramenta extremamente nova ao seu kit de programação PHP e retrabalhar esse código para ser um muito mais magro e elegante.

Em cada etapa, se a sequência de pesquisa for encontrada, o usuário colocou uma dessas palavras -chave SQL especiais que não&rsquo;t Retornar linhas, então a variável $ return_rows está configurado para falso , diferente do seu valor original, verdadeiro .

Finalmente, no final deste festival de amor de brace curly, o se declarações relaxam de volta ao programa principal, e qualquer $ returns_rows tem um valor de verdadeiro Porque nenhuma das pesquisas correspondeu, ou falso Porque um deles fez.

Agora você&rsquo;estou pronto para usar $ returns_rows Para imprimir um resultado:

Observação

Lembre-se disso if ($ return_rows) é o mesmo que if ($ return_rows === true) . O mesmo vale para se ($ resultado) .

A maior parte desse script é familiar. Todo o código que você&rsquo;Estive usando para imprimir linhas permanece o mesmo. Esse código apenas se move dentro do if ($ return_rows) bloco, porque só se aplica se o usuário colocar algo como um Selecione que retorna (potencialmente) muitos resultados.

Então, no outro para isso se , Seu script apenas relata se as coisas foram ou não bem. Como ajuda adicional, esta seção do se imprime a consulta original para que o usuário possa saber o que foi executado.

Agora, tecnicamente, você não&rsquo;T realmente preciso disso se ($ resultado) . Desde que você testou anteriormente para ver se $ resultado é falso, se o seu script chegar a este último pedaço, você sabe que $ resultado é verdadeiro , Então você pode simplificar um pouco as coisas no final:

Este script está ficando um pouco longo, mas você sabe o que cada linha está fazendo neste momento. Vá em frente e experimente.

Você provavelmente criou o URLs tabela (inserindo sua primeira consulta baseada na Web)-mesmo que seu script php não tenha feito&rsquo;T avisando isso. Então tente entrar Soltar URLs de mesa ; Como sua consulta SQL. Em seguida, execute sua consulta e, desta vez, você deve receber uma mensagem útil de volta, específica para sua consulta sem remos, como você pode ver na Figura 4-12.

Lidar com humanos

Infelizmente, aí&rsquo;ainda é um problema em uma das linhas no código na seção anterior. No momento, se o seu usuário digitar a seguinte consulta, o que acontece?

Soltar URLs de mesa;

Seu conjunto de se Declarações entende isso DERRUBAR faz parte da consulta, percebe que não tem linhas de retorno e faz a coisa certa: relata que a consulta correu sem problemas ou que ocorreu um erro.

Agora run_query.php, conforme mostrado na página 119, descobre se foi aprovado uma consulta com uma das palavras -chave que indica que não existem linhas de retorno. A mensagem quando as coisas correm bem ainda é um pouco concisa, mas pelo menos não há espaço em branco de tentar mostrar linhas de resultado quando não há linhas de resultado para mostrar

Figura 4-12. Agora run_query.PHP, como mostrado na página 119, descobre se&rsquo;foi aprovado uma consulta com uma das palavras -chave que indica que não existem&rsquo;t qualquer linha de retorno. A mensagem quando as coisas correm bem ainda é um pouco concisa, mas pelo menos lá&rsquo;não é espaço em branco de tentar mostrar linhas de resultado quando não houver&rsquo;t qualquer linha de resultado para mostrar.

Mas e essa consulta? Você vê onde o problema está?

soltar URLs de mesa;

Aqui&rsquo;é a declaração que deve indicar uma correspondência:

$ location = strpos ($ query_text, "gota"); if ($ location === false) < // this should return true, and so there are no return rows >

Mas essa linha procura por DERRUBAR , o que não&rsquo;t corresponde &ldquo;derrubar&rdquo; de forma alguma. strpos Procura por cordas, mas vê uma letra minúscula, como &ldquo;d&rdquo;, como uma carta diferente de uma maiúscula &ldquo;D&rdquo;. Para que a pesquisa encontre &ldquo;DERRUBAR&rdquo; mas não &ldquo;derrubar&rdquo; ou &ldquo;derrubar&rdquo;.

E, como sempre, você&rsquo;Tenho humanos usando seu aplicativo, não robôs. Você pode&rsquo;Apenas suponho que esses humanos sejam bons cidadãos SQL e sempre usem letras maiúsculas. Você pode colocar uma pequena mensagem no formulário: Digite seu SQL em todas as letras maiúsculas , Mas os humanos serão humanos, e eles tendem a ignorar instruções como esta.

Você&rsquo;LL gasta pelo menos Tanto do seu tempo lidando com o fator humano em seu código quanto a escrita que lida com o chamado fluxo normal de operação. De fato, depois de adicionar pessoas reais à sua linha de pensamento, você&rsquo;eu perceberá isso &ldquo;normal&rdquo; isn&rsquo;t um conceito muito útil. Em vez disso, seu código simplesmente tem que lidar com tantas possibilidades quanto você pode imaginar (e alguns que você pode&rsquo;t).

Corrigir o problema minúsculo e maiúsculo acaba sendo bastante simples: você pode simplesmente converter $ query_string Para todas as letras maiúsculas antes de começar a pesquisá -lo:

$ return_rows = false; $ query_text = strtoupper ($ query_text); $ location = strpos ($ query_text, "create"); // todos os bloqueios se aninhados.

Agora, se um usuário tipos soltar URLs de mesa ou Soltar URLs de mesa , A sequência de pesquisa é Soltar URLs de mesa , e procurando &ldquo;DERRUBAR&rdquo; Vai devolver uma partida.

Mas lá&rsquo;é outro problema! Antes de ler, veja se você consegue descobrir o que é.

Observação

Sim, existem muitas rugas e problemas com apenas um programa simples. Que&rsquo;é por isso que existem muitos programadores, mas tão poucos programadores realmente ótimos: a diferença é lidar com todos esses pequenos detalhes sem jogar seu iPhone através de uma parede próxima.

Evite alterar a entrada do usuário sempre que possível

Para identificar esse problema em potencial com seu script de consulta, dê uma olhada no último pedaço do seu código que&rsquo;S Run Se o usuário entrar em uma consulta sem remos como Drop ou Insert:

// Sem linhas. Basta relatar se a consulta correu ou não eco "

Sua consulta foi processada com sucesso.

"Echo"

";

Execute este código e você&rsquo;eu conseguirei algo como você ver na Figura 4-13.

Às vezes, o melhor problema que você pode resolver é o problema que ainda não ocorreu. Olhe de perto a consulta SQL aqui e compare-a com a consulta na Figura 4-12. Esse tipo de trabalho de detetive tedioso leva horas, mas é absolutamente crítico para que os aplicativos da Web funcionem no mundo real

Figura 4-13. Às vezes, o melhor problema que você pode resolver é o problema que não tem&rsquo;ainda ocorreu. Olhe de perto a consulta SQL aqui e compare-a com a consulta na Figura 4-12. Esse tipo de trabalho tedioso de detetive leva horas, mas&rsquo;é absolutamente crítico para que os aplicativos da web funcionem no mundo real.

Observação

Se você&rsquo;Se acompanhar, você pode precisar Soltar URLs de mesa ; antes de você pode CRIAR de novo, ou CRIAR a mesa antes de você pode DERRUBAR isto.

Compare cuidadosamente o código na Figura 4-12 e Figura 4-13. Na Figura 4-13, você&rsquo;Observe que tudo está em maiúsculas. Isso faz sentido, porque, para facilitar a pesquisa, você adicionou esta linha ao seu script:

$ query_text = strtoupper ($ query_text);

Então, quando você sai $ query_text No final, a saída é mostrada em todas as letras maiúsculas. Este é um grande negócio? Bem, não faz&rsquo;Parece estar, pelo menos não aqui. Mas revela algo: depois disso $ query_text a string é convertida em maiúsculas, sempre que a&rsquo;S usado, isso&rsquo;está voltando com todas as cartas maiúsculas. Então, suponha que a consulta original fosse algo assim:

Selecione * de usuários onde last_name = "maclachlan";

Agora considere essa mesma consulta, transformada em todas as cartas maiúsculas:

Selecione * de usuários onde last_name = "maclachlan";

Acredite ou não, estas não são a mesma consulta. Selecione - e a maioria das outras consultas SQL - vão tratar um sobrenome de &ldquo;Maclachlan&rdquo; como sendo totalmente diferente de &ldquo;Maclachlan.&rdquo; Então, essas duas consultas não são idênticas.

No momento, isso não&rsquo;t Crie qualquer problema. Seu script nunca reeu renova a consulta, e mysql_query corre com $ query_text antes Está transformado em sua versão em maiúsculas. Mas isso é um problema esperando para acontecer.

Em geral, você deseja tentar evitar alterar diretamente a entrada de um usuário. Que&rsquo;s porque você obtém exatamente esse tipo de problema: pode precisar usar essa entrada novamente e depois que você&rsquo;mudou isso, você pode&rsquo;Volte.

Felizmente, o remédio é simples: em vez de mudar o usuário&rsquo;S entrada, você usa uma nova variável para armazenar a versão em alta da consulta:

$ return_rows = false; $ uppercase_query_text = strtoupper ($ query_text); $ location = strpos ($ query_text, "create");

Você deve usar esta nova variável em todas as suas comparações de string:

$ return_rows = false; $ uppercase_query_text = strtoupper ($ query_text); $ location = strpos ($ uppercase_query_text, "create"); if ($ location === false) <  $ location = strpos ($ uppercase_query_text, "insert"); if ($ location === false) <  $ location = strpos ($ uppercase_query_text, "update"); if ($ location === false) <  $ location = strpos ($ uppercase_query_text, "delete"); if ($ location === false) <  $ location = strpos ($ uppercase_query_text, "gota"); 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; >>>>>

Por mais pequena mudança que seja, ela protege você, caso você precise usar essa sequência de consulta novamente.

E assim você&rsquo;Na verdade, tenho uma ferramenta que executará qualquer consulta SQL que você jogará nela. Mas lá&rsquo;S ainda a fazer a fazer. Todo esse código de pesquisa realmente desgasta seu script, e ali&rsquo;Só sem contornar isso: seu script é muito difícil de entender no início (e até mesmo o segundo). No próximo capítulo, você&rsquo;LL lidará com tudo isso, tomando sua forma de uma forma básica útil para um exercício muito bom do seu músculo php.

USUÁRIOS AVANÇADOS&rsquo; Clínica: Seja específico com a posição e o apartamento do espaço em branco

Neste capítulo, você&rsquo;definitivamente fazendo run_query.php muito melhor, mas ainda existem alguns problemas. Suponha que alguém tenha escrito SQL como este:

Selecione * FROM REGISTER_ACTIVIDIDADES WHERE NOME = 'ATUALIZAÇÃO GPA' ou NOME = 'DOLL A CLASS'

Isto é um Selecione declaração, então run_query.php deve executar o SQL e imprimir todas as linhas retornadas desta consulta. Mas lá&rsquo;é um pequeno problema desagradável, não é&rsquo;t lá?

Sim. Seu código que procura &ldquo;atualizar&rdquo; e &ldquo;derrubar&rdquo; relatará que esta consulta tem as duas palavras e simplesmente retornar &ldquo;Seu SQL foi executado sem problemas.&rdquo; Mas isso é um problema!

Para resolver o problema, pense na estrutura do SQL. Essas palavras -chave especiais - Criar, inserir , e seus amigos - todos são os primeiro Palavra na consulta. Então você precisa obter a posição da partida e ver se essa posição está na posição 0. Você pode fazer isso adicionando ao seu se Condições e usando o operador OR em PHP:

if ($ local === FALSE || $ Localização> 0)

O tubo duplo (||) significa &ldquo;ou&rdquo; para php. Então, a linha de código diz, se lá&rsquo;não é nada ( $ location === FALSO ) ou a partida não é&rsquo;t começando na primeira posição (posição 0), depois procure a próxima palavra -chave. Claro, você&rsquo;D tenho que mudar todo o seu se declarações, que é ainda mais bagunçado. Portanto, essa correção é uma melhoria, embora realmente se alcance seu código ainda mais.

Mas fica pior! Você&rsquo;estar lidando com humanos reais, e os humanos fazem coisas engraçadas. Suponha que alguém entre este SQL em seu formulário:

Crie URLs de tabela (id int, URL Varchar (100), Descrição Varchar (100));

Agora você&rsquo;Tenho um novo problema: isso não é&rsquo;t a Selecione , Mas seu código de pesquisa venceu&rsquo;t Encontre uma dessas palavras especiais no começo. O primeiro personagem é apenas um espaço: &ldquo; &rdquo;.

Mas você também pode resolver esse problema, usando outra função familiar: aparar. aparar Livre -se do espaço em branco e, se você fizer isso antes de pesquisar, deve estar em boa forma:

$ uppercase_query_text = Trim (strtoupper ($ query_text));

Isso provavelmente parece uma tonelada de trabalho para uma forma realmente simples e única. Mas quando você&rsquo;está trabalhando com a entrada do usuário, você deseja pensar constantemente sobre o que os usuários podem faria. E como você pode ajudar a evitá -los vendo algo estranho ou cometindo um erro. Pense assim, e você&rsquo;vou construir aplicativos da web melhores, mais estáveis ​​e mais agradáveis.

Pegar PHP & MYSQL: o manual ausente Agora com o O&rsquo;Reilly Learning Platform.

O&rsquo;Os membros da Reilly experimentam livros, eventos ao vivo, cursos com curadoria por função de trabalho e muito mais de O&rsquo;Reilly e quase 200 melhores editores.

É necessário usar o PHP para se conectar ao MySQL

É necessário usar o PHP para conectar -se ao MySQL, estou trabalhando no aplicativo de desktop e não tenho conhecimento de PHP, existe alguma classe ou funcionalidade de construção que possa ser usada para se conectar ao MySQL, embora haja muitos programas presentes na Internet para fazer isso, mas não capazes de encontrar um sem o uso do PHP. Existe alguma referência ou posso ter o exemplo passo a passo sobre o trabalho. MySQL Config tem as configurações padrão. como o nome de usuário é root e a senha está em branco o nome do meu servidor é o host local.

39.3K 4 4 Crachás de ouro 37 37 Crachás de prata 59 59 Crachás de bronze

Perguntado em 19 de outubro de 2011 às 23:00

7 4 4 crachás de bronze

Eu marquei isso como php e mysql e removi as tags flexíveis. Esta pergunta não tem nada a ver com flexão.

20 de outubro de 2011 às 0:34

3 respostas 3

Não. PHP é uma linguagem de programação. MySQL é um banco de dados. Instale o MySQL e digite MySQL na linha de comando e você estará se conectando ao MySQL usando o MySQL.

respondeu em 19 de outubro de 2011 às 23:02

10.7k 11 11 Crachás de ouro 61 61 Crachás de prata 113 113 Crachás de bronze

Mas como faço para me conectar ao banco de dados, posso ter alguma referência para me conectar com ele.Não consigo fazer isso Adobe tem alguns na biblioteca que eu preciso conhecer ou alguma outra referência através da qual posso me conectar ao banco de dados.Por favor, preciso de ajuda neste tópico.

Funções do MySQL

Observação:

A maioria das funções MySQL aceita link_entifier como o último parâmetro opcional. Se não for fornecido, a última conexão aberta será usada. Se não existir, a conexão é tentada estabelecer com parâmetros padrão definidos no PHP.ini . Se não for bem -sucedido, as funções retornam falso .

Índice

  • MySQL_Affeted_Rows - Obtenha o número de linhas afetadas na operação MySQL anterior
  • mysql_client_encoding - retorna o nome do conjunto de personagens
  • mysql_close - feche a conexão MySQL
  • mysql_connect - Abra uma conexão com um servidor MySQL
  • mysql_create_db - crie um banco de dados MySQL
  • mysql_data_seek - mover ponteiro de resultado interno
  • mysql_db_name - recupera o nome do banco de dados da chamada para mysql_list_dbs
  • mysql_db_query - seleciona um banco de dados e executa uma consulta nele
  • mysql_drop_db - solt (delete) um banco de dados MySQL
  • mysql_errno - retorna o valor numérico da mensagem de erro da operação anterior do MySQL
  • mysql_error - retorna o texto da mensagem de erro da operação anterior do MySQL
  • mysql_escape_string - escapa de uma string para uso em um mysql_query
  • mysql_fetch_array - busque uma linha de resultado como uma matriz associativa, uma matriz numérica ou ambos
  • mysql_fetch_assoc - busque uma linha de resultado como uma matriz associativa
  • mysql_fetch_field - Obtenha informações da coluna de um resultado e retorne como objeto
  • mysql_fetch_lengths - obtenha o comprimento de cada saída em um resultado
  • mysql_fetch_object - busque uma linha de resultado como um objeto
  • mysql_fetch_row - Obtenha uma linha de resultado como uma matriz enumerada
  • mysql_field_flags - Obtenha as bandeiras associadas ao campo especificado em um resultado
  • mysql_field_len - retorna o comprimento do campo especificado
  • mysql_field_name - Obtenha o nome do campo especificado em um resultado
  • mysql_field_seek - Defina o ponteiro de resultado para um deslocamento de campo especificado
  • mysql_field_table - Obtenha o nome da tabela, o campo especificado está em
  • mysql_field_type - Obtenha o tipo de campo especificado em um resultado
  • mysql_free_result - Memória de resultado livre
  • mysql_get_client_info - obtenha informações do cliente mysql
  • mysql_get_host_info - obtenha informações do host mysql
  • mysql_get_proto_info - obtenha informações do protocolo MySQL
  • mysql_get_server_info - obtenha informações do servidor mysql
  • mysql_info - Obtenha informações sobre a consulta mais recente
  • mysql_insert_id - Obtenha o ID gerado na última consulta
  • MySQL_LIST_DBS - Listões de dados disponíveis em um servidor MySQL
  • mysql_list_fields - listar campos de tabela mysql
  • mysql_list_processos - Liste os processos MySQL
  • MySQL_List_Tables - Tabelas de lista em um banco de dados MySQL
  • mysql_num_fields - Obtenha o número de campos no resultado
  • mysql_num_rows - Obtenha o número de linhas no resultado
  • mysql_pconnect - abra uma conexão persistente com um servidor MySQL
  • mysql_ping - pingue uma conexão ou reconecte o servidor se não houver conexão
  • mysql_query - envie uma consulta mysql
  • mysql_real_escape_string - escapa de caracteres especiais em uma string para uso em uma instrução SQL
  • mysql_result - Obtenha dados de resultados
  • mysql_select_db - selecione um banco de dados MySQL
  • mysql_set_charset - define o conjunto de caracteres do cliente
  • mysql_stat - obtenha o status atual do sistema
  • mysql_tablename - Obtenha o nome da tabela do campo
  • mysql_thread_id - retornar o ID do thread atual
  • mysql_unbuffered_query - Envie uma consulta SQL para MySQL sem buscar e buffer as linhas de resultado

Notas contribuídas pelo usuário 38 Notas

15 anos atrás

# Criado por Dhirendra pode ser encontrado em Dhirendrak no Yahoo Dot Com
# Este script é criado para verificar a diferença de dados entre duas tabelas
# Quando a estrutura de ambas as tabelas é a mesma.
# Limitação:
# 1) A estrutura de ambas as tabelas deve ser a mesma.
# 2) O nome de ambas as tabela deve ser diferente, mas se é o mesmo que obviamente
# Segunda tabela deve ser se diferente banco de dados.
# 3) Se usar dois bancos de dados, a permissão do banco de dados deve ser a mesma
# como estou usando aliases para obter as informações.
#
# Usa ::
# 1) Isso pode ser útil quando você fez algumas mudanças em sua existência
# script e você espera a determinada saída. Então, com a ajuda disso
# função Você pode comparar o impacto devido às suas mudanças no script.
#
#

$ host = ""; # nome do host ou endereço IP
$ user = ""; # Nome de usuário do banco de dados
$ pass = ""; # senha do banco de dados
$ database = ""; # Nome do DataBase com o qual você deseja conectar

# Obtenha conexão com MySQL
$ dblink = @ mysql_connect ($ host, $ user, $ pass);

# Selecione e abra o banco de dados
mysql_select_db ($ banco de dados, $ dblink);

$ db1 = "< your db1 >"; // Primeiro banco de dados
// Segundo banco de dados se o banco de dados for o mesmo para ambas as tabelas do que use o mesmo que o db1
$ db2 = "< your db2 >";
$ tabela1 = "< your table1 >"; // Primeira tabela
// Segunda tabela se o banco de dados for o mesmo para as duas tabelas que o nome da tabela
# deve ser diferente, mas o nome dos campos é o mesmo e a ordem dos campos é o mesmo.

// A função começa aqui
função tabela_data_difference ($ primeiro, $ segundo)
Global $ dblink;
$ sql1 = "mostre campos de $ primeiro";
$ resultado = mysql_query ($ sql1, $ dblink) ou die ("com erro na execução 1 = palavra -chave">. mysql_error ());

while ($ row = mysql_fetch_object ($ resultado))
<
$ from_fields [] = $ linha -> campo;
>

$ sql = "selecione * de $ primeiro";
$ res = mysql_query ($ sql, $ dblink) ou die ("com erro na execução 2 = palavra -chave">. mysql_error ());
$ j = 1;
while ($ row = mysql_fetch_array ($ res))

$ num = count ($ from_fields);

$ sql_next = "Selecione $ segundo .* de $ segundo onde ";

para ($ i = 0; $ i < $num ; $i ++)
$ sql_next = $ sql_next . "" . $ segundo . "." . $ de_fields [$ i]. "= '" . $ Row [$ from_fields [$ i]]. "' e " ;
>

$ sql_next = substr ($ sql_next, 0, strlen ($ sql_next)- 5);

$ res_next = mysql_query ($ sql_next, $ dblink) ou die ("com erro na execução 3 = palavra -chave">. mysql_error ());
$ num1 = mysql_num_rows ($ res_next);
if ($ num1 == 0)
para ($ i = 0; $ i < count ( $from_fields ); $i ++)
$ val = $ val . "
" . $ de_fields [$ i]. "Palavra -chave">. $ row [$ from_fields [$ i]];
>
// exibe o registro que não é correspondido.
eco "
\ n " . $ j . "." . $ val;
eco "
-----------------------------------------------------";
$ j ++;
>

$ primeiro = $ db1 . '.' . $ tabela1;
$ segundo = $ db2 . '.' . $ tabela2;

tabela_data_difference ($ primeiro, $ segundo);

16 anos atrás

Para usuários do Windows, observe:

Se o Apache for instalado como um serviço e você alterar a variável do caminho para que ele possa atingir libmysql.DLL, você precisará reiniciar sua máquina para ter mudanças aplicadas.

15 anos atrás

Além disso, para proteger os dados do MySQL e para poder cumprir com os padrões da PCI, você deve criptografar os dados. Existem várias maneiras de fazer isso. Para hackers, você pode usar DM-Crypt (www.salout.ferramenta de/misc/dm-crypt). É basicamente usado para criptografar toda a partição. Se você deseja uma solução sofisticada, vá com segurança-geral para o MySQL da Packet General (www.PacketGeneral.com)
No Windows, você pode usar o recurso de criptografia de disco fornecido pelo próprio Windows ou ferramenta como Trucrypt (www.TrueCrypt.org)

15 anos atrás

@Amanda 12-OCT-2007 09:58

Eu quase tive que me perguntar se essa era uma pergunta real. Se o servidor MySQL rejeitar a tentativa de conexão, sim, o MySQL poderá enviar de volta um erro ao PHP. E se o PHP não puder acessar o servidor MySQL de destino, também é inteligente o suficiente para emitir o erro apropriado por si só.

17 anos atrás

Se você deseja fazer com que o PHP funcione bem com o MySQL, mesmo com o Apache, em Sistemas Baseados no Windows, tente Xampp, da Apache Friends. Economiza mexendo nos arquivos de configuração, que é o único grande problema em tentar fazer com que os três trabalhem juntos no Windows.

17 anos atrás

Uma nota sobre recursos

Quando um recurso (e.g. Um identificador de link) fica sem escopo, é excluído e os recursos do computador associados (e.g. o link TCP para o banco de dados) também será encerrado. Até agora tudo bem!
No entanto, no código a seguir, o link TCP MySQL persiste até o final da execução:
$ conn = mysql_connect ('hostname', 'nome de usuário', 'senha');
$ conn = null;
sono (30);
?>
Isso ocorre porque o identificador de link está sendo salvo, para que as funções subsequentes do MySQL funcionem. Parece não haver como excluir esta referência interna.
Se você foi, no entanto, para abrir duas conexões, a mais antiga será excluída automaticamente (para que a conexão com o nome do host terá terminado na instrução $ conn = null, a conexão com o nome do host existirá até o final do script).
$ conn = mysql_connect ('hostname', 'nome de usuário', 'senha');
$ conn2 = mysql_connect ('hostName2', 'nome de usuário', 'senha');
$ conn = null;
$ conn2 = null;
sono (30);
?>

17 anos atrás

Eu uso o iis 6, php 5.04, Windows Server 2003 e MySQL 4.1.11. E aqui está o que eu consegui descobrir.
Para fazer com que o MySQL e o PHP conversem um com o outro, no PHP.CFG, não se esqueça de ligar a etiqueta
CGI.force_redirect = 0, e certifique -se de defini -lo em 0 (é padrão em 1. Basta excluir o Semi-Colon da frente para ativá-lo no código), então o PHPINFO dirá que está lendo o CFG do seu diretório de instalação PHP em vez do seu Windows Root. Então seu Phpinfo mostrará a entrada do MySQL com a qual algumas pessoas podem estar tendo dificuldade. Nenhuma configuração de registro ou cópia de qualquer coisa é necessária. Siga também o restante da excelente ajuda dos comentários do usuário. Aqui está o que eu fiz, para simplificar:
Fiz uma pasta na árvore da pasta logo acima dos arquivos de programas (explore o seu computador) e o nomei PHP. Eu extraí o .Versão Zip PHP (não a versão de instalação automática). Eu editei o PHP.Recomendido Ini, renomeado para apenas PHP, adicionou meu nome de usuário SQL, nome do banco de dados, etc.(você realmente tem que olhar de perto o arquivo CFG e certifique -se de não esquecer algo). LIGADO na extensão = php_mysql.DLL (basta excluir o semi-colon que está na frente dele). Adicionado a pasta PHP ao caminho (instruções sobre como fazer isso são bem simples e documentadas acima). Eu também disponibilizei a pasta ext disponível para o caminho, mas não tenho certeza se é realmente necessário. Os comentários do usuário são o que realmente me ajudou, então pensei em devolver o favor e tentar expandir um pouco esse tópico.

18 anos atrás

Fedora MySQL Problemas!!
No Fedora 3, o módulo PHP MySQL não vem com a instalação padrão. Para instalá -lo, use $> yum install php_mysql
Se você não fizer isso, você receberá erros com funções MySQL como mysql_connect ()

Espero que isto ajude!

18 anos atrás

Se você deseja replicar a saída de `mysql - -html`, imprimindo seus resultados em uma tabela HTML, consulte esta função:

21 anos atrás

Olá, aqui está um belo truque para selecionar recordes em ordem aleatória em uma tabela em um banco de dados MySQL antes da versão 3.23

Selecione *, (ItemId/ItemId) *Rand () como Myrandom From Its Order by Myrandom

[Editores Nota: e apenas "Selecione * FROM FOO ORDER BY RAND ()" Após 3.23]

15 anos atrás

Depois de finalmente conseguir o IIS, PHP e MySQL em uma nova máquina do Windows XP, decidi escrever as etapas que dei para que você possa ver como foi feito: http: // www.Atksolutions.com/artigos/install_php_mysql_iis.html

Espero que isto ajude.

15 anos atrás

/*
Instalação do servidor MySQL (Comunidade) no Windows XP de 32 bits em execução

No Windows, a maneira recomendada de executar o MySQL é instalá -lo como um serviço do Windows, pelo qual o MySQL começa e para automaticamente quando o Windows começa e para. Um servidor MySQL instalado como um serviço também pode ser controlado a partir dos comandos da linha de comando ou com o utilitário de serviços gráficos como o phpmyadmin.

Php ---> conectores MySQL (php_mysql.DLL e PHP_MYSQLI.dll como extensões)
O MySQL fornece as extensões MySQL e MySQLI para o sistema operacional Windows em http: // dev.mysql.com/downloads/conector/php/para mysql versão 4.1.16 e superior, MySQL 5.0.18 e MySQL 5.1. Como a ativação de qualquer extensão de PHP no PHP.ini (como php_mysql.dll), a diretiva PHP Extension_dir deve ser definida para o diretório onde as extensões PHP estão localizadas.

MySQL não está mais ativado por padrão, então o php_mysql.A DLL DLL deve ser ativada dentro do PHP.ini. Além disso, o PHP precisa de acesso à biblioteca de clientes MySQL. Um arquivo chamado libmysql.A DLL está incluída na distribuição do Windows PHP e, para que o PHP converse com MySQL, esse arquivo precisa estar disponível no caminho do Windows Systems.

A seguir, o script PHP é útil para testar a conexão com PHP com o MySQL.
*/

// $ connect = mysql_connect ("seu nome do host", "diretório raiz do mysql", 'senha mysql, se houver');
// $ Connect = mysql_connect ("Nome ou endereço do host - 127.0.0.1 "," root ", 'senha');
$ connect = mysql_connect ("localhost", "root", 'senha');
Se ($ Connect) eco "Parabéns!\ n
";
eco "conectado com sucesso ao MySQL Database Server.\ n
";
> else $ error = mysql_error ();
eco "não conseguiu se conectar ao banco de dados. Erro = $ erro .\ n
";
saída();
>

// conexão de fechamento
$ close = mysql_close ($ connect);
se ($ fechar) eco "\ n
";
eco "agora fechando a conexão. \ n
";
eco "A conexão MySQL também fechou com sucesso.\ n
";
> elseecho "Há um problema ao fechar a conexão MySQL.\ n
";
>
saída();
?>

16 anos atrás

Eu fiz essa função para reduzir as chamadas de banco de dados. Você pode armazenar o MySQL resulta em uma sessão var e classificar os resultados em qualquer coluna. Pode funcionar bem em um aplicativo Ajax.

função mysql_sort ($ resultados, $ sort_field, $ dir = "asc") $ temp_array = array ();
$ i = 0;
foreach ($ resulta como $ 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 como $ k => $ v) $ new_results [$ i] = $ resultados [$ k];
$ i ++;
>
ksort ($ new_results);
retornar $ new_results;

//usar
if (count ($ _ session ["res"]) == 0) $ _session ["res"] = [obtenha resultados do banco de dados, no entanto, você pode]
>

$ _Session ["res"] = mysql_sort ($ _ session ["res"], $ _request ["sort"], $ _request ["dir"]);

17 anos atrás

John Coggeshall escreveu um script de compatibilidade Php5 Ext/Mysqli para aplicações que ainda usam as funções antigas Ext/Mysql. Isso impede o incômodo de tentar ter as extensões MySQL e Mysqli carregadas em Php5, o que pode ser complicado.

17 anos atrás

Habilitando MySQL com o Windows Server 2003/IIS 6.0:
Encontre seu PHP.Arquivo INI Primeiro, verifique Phpinfo () para ver onde o PHP está procurando.ini. (eu.e. Usando o instalador do Windows para Php 5.0.4, o PHP.O arquivo ini foi colocado no C: \ Windows Dir.) Eu recomendo, no entanto, que você não use o instalador - vá com instalação manual completa.

Defina o seguinte no PHP.ini:
display_errors = on
error_reporting = e_all
Isso garantirá que você verá quaisquer erros que surjam durante a configuração. Certifique -se de corrigi -las quando terminar de brincar com PHP.Ini! Não deixe essas configurações como esta em uma máquina de produção.

Em php.Ini defina o seguinte:
Extension_Dir = "Pathtoextensions (ususalmente [YourPathtophp] \ ext)"
Extensão = php_mysql.DLL (verifique se isso não é contratado se já estiver no seu PHP.ini)

No IIS, abre extensões de serviço da web, clique em "Adicionar uma nova extensão de serviço da web. "
Php de tipo para o nome da extensão
Em arquivos necessários:
Adicione [YourPathtophp] \ php5isapi.dll
Adicione [YourPathtophp] \ php5ts.dll
Clique em 'Aplicar' e clique em 'OK'

Crie sites como você normalmente, mas verifique se eles têm permissões executáveis, não apenas acesso ao script. Na guia "Diretório doméstico", clique em "Configuração". Role a lista na parte superior e veja se você consegue encontrar PHP. Se o fizer, verifique se o caminho para o executável para PHP está correto. Se você não encontrar PHP na lista, clique em 'Adicionar. ', então navegue para o executável correto, [YourPathtophp] \ php5isapi.dll e clique em OK. No campo de extensão, insira 'php'. Os verbos já devem ser definidos como 'todos os verbos', deixe -o assim.

Crie uma página de teste com este código:

Chame de teste.PHP e coloque este arquivo no site que você acabou de criar. Navegue até a página, com o Firefox de preferência;) e verifique se você tem uma seção MySQL com algumas informações do MySQL lá. Caso contrário, seus caminhos estão possivelmente estragados, ou você ainda não está editando o PHP correto.Ini (novamente, veja o local que o Phpinfo () mostra e apenas edite lá se for necessário, depois mova-o depois e reconfig).

mysql_connect

Esta extensão foi preterida no Php 5.5.0, e foi removido no Php 7.0.0. Em vez disso, a extensão MySqli ou PDO_MYSQL. Veja também MySQL: Escolha de um guia da API. As alternativas a esta função incluem:

Descrição

mysql_connect (
string $ server = ini_get ("mysql.default_host ") ,
string $ nome de usuário = ini_get ("mysql.usuário padrão") ,
string $ senha = ini_get ("mysql.senha padrão") ,
bool $ new_link = falso ,
int $ client_flags = 0
): Recurso | falso

Abre ou reutiliza uma conexão com um servidor MySQL.

Parâmetros

O servidor MySQL. Também pode incluir um número de porta. e.g. "HostName: Port" ou um caminho para um soquete local e.g. ":/path/to/soket" para a localhost.

Se a diretiva PHP MySQL.Default_host é indefinido (padrão), então o valor padrão é 'localhost: 3306'. No modo de segurança SQL, este parâmetro é ignorado e valor 'localhost: 3306' é sempre usado.

O nome de usuário. O valor padrão é definido por MySQL.usuário padrão. No modo de segurança SQL, este parâmetro é ignorado e o nome do usuário que possui o processo do servidor é usado.

A senha. O valor padrão é definido por MySQL.senha padrão. No modo de segurança SQL, este parâmetro é ignorado e a senha vazia é usada.

Se uma segunda chamada for feita para mysql_connect () Com os mesmos argumentos, nenhum novo link será estabelecido, mas o identificador de link do link já aberto será retornado. O parâmetro newlink modifica esse comportamento e faz mysql_connect () Sempre abra um novo link, mesmo que mysql_connect () foi chamado antes com os mesmos parâmetros. No modo de segurança SQL, este parâmetro é ignorado.

O parâmetro client_flags pode ser uma combinação das seguintes constantes: 128 (Ativar dados de carga de manuseio local), Mysql_client_sssl , Mysql_client_compress , Mysql_client_ignore_space ou Mysql_client_interactive . Leia a seção sobre as constantes do cliente MySQL para obter mais informações. No modo de segurança SQL, este parâmetro é ignorado.

Valores de retorno

Retorna um identificador de link MySQL no sucesso ou falso na falha.

Exemplos

Exemplo 1 mysql_connect () exemplo

$ link = mysql_connect ('localhost', 'mysql_user', 'mysql_password');
se (! $ link) Die ('não conseguiu se conectar:' . mysql_error ());
>
eco 'conectado com sucesso';
mysql_close ($ link);
?>

Exemplo #2 mysql_connect () Exemplo usando o nome do host: Sintaxe da porta

// Nós nos conectamos ao exemplo.com e porta 3307
$ link = mysql_connect ('exemplo.com: 3307 ',' mysql_user ',' mysql_password ');
se (! $ link) Die ('não conseguiu se conectar:' . mysql_error ());
>
eco 'conectado com sucesso';
mysql_close ($ link);

// Nós nos conectamos ao host local na porta 3307
$ link = mysql_connect ('127.0.0.1: 3307 ',' mysql_user ',' mysql_password ');
se (! $ link) Die ('não conseguiu se conectar:' . mysql_error ());
>
eco 'conectado com sucesso';
mysql_close ($ link);
?>

Exemplo #3 mysql_connect () Exemplo usando a sintaxe ":/path/to/socket"

// Nós nos conectamos ao localHost e ao soquete E.g. /tmp/mysql.meia

// Variante 1: omitir localhost
$ link = mysql_connect (':/tmp/mysql', 'mysql_user', 'mysql_password');
se (! $ link) Die ('não conseguiu se conectar:' . mysql_error ());
>
eco 'conectado com sucesso';
mysql_close ($ link);

// variante 2: com localhost
$ link = mysql_connect ('localhost:/tmp/mysql.Sock ',' mysql_user ',' mysql_password ');
se (! $ link) Die ('não conseguiu se conectar:' . mysql_error ());
>
eco 'conectado com sucesso';
mysql_close ($ link);
?>

Notas

Observação:

Sempre que você especificar "localhost" ou "localhost: porta" como servidor, a biblioteca do cliente MySQL substituirá isso e tentará se conectar a um soquete local (chamado Pipe no Windows). Se você quiser usar o TCP/IP, use "127.0.0.1 "em vez de" localhost ". Se a biblioteca do cliente MySQL tentar se conectar ao soquete local errado, o caminho correto deve ser definido como MySQL.default_host em php.Ini e o campo do servidor deixou em branco.

Observação:

O link para o servidor será fechado assim que a execução do script terminar, a menos que seja fechado anteriormente chamando explicitamente o mysql_close () .

Observação:

Erro "Não é possível criar soquete TCP/IP (10106)" geralmente significa que a diretiva de configuração Variables_order não contém caractere e . No Windows, se o ambiente não for copiado, a variável de ambiente Systemroot não estará disponível e o PHP terá problemas para carregar o Winsock.

Veja também

  • mysql_pconnect () - Abra uma conexão persistente com um servidor MySQL
  • mysql_close () - feche a conexão MySQL

Notas contribuídas pelo usuário 36 Notas

10 anos atrás

Cuidado aqui se você usar UTF8.

O arquivo db.OPT do seu banco de dados deve conter as seguintes linhas:
CARACTER-CARACTERS-SET = UTF8
default-collation = utf8_general_ci

Isso significa que seu banco de dados é criado para usar o UTF8 caractereset.
Uma maneira de conseguir isso é:
Criar banco de dados My_Database Set de caracteres padrão utf8 colate utf8_general_ci;

Então, depois de se conectar a ele do PHP, você deve usar:
mysql_set_charset ("utf8", $ conexão);

Se você não fizer isso, terá problemas feios, caso outro software esteja lendo e escrevendo no mesmo banco de dados.

15 anos atrás

O problema de muitas conexões pode ser devido a vários problemas.

1. você está usando pconnect. Isso pode amarrar muitas conexões e não é realmente necessário para o MySQL, pois novas conexões são muito rápidas.

2. As crianças Apache ficam por muito tempo - misture isso com pconnect e você tem receita para desastre.

Sugestões: reduza a quantidade de tempo que os processos infantis permanecem conectados ao cliente e quantas conexões antes de serem mortas. E não use pconnect.

6 anos atrás

módulos fcgid_module/mod_fcgid.então
FcgidMaxRequestlen 209715200
FcGidConnectTimeout 240
FcgidioTimeout 240
FCGIDBUSYSCANINTAL 240
Fcgidbusytimeout 240
# Este línea instruye al servidor web para que queco reconhecida uno uto nuevo (php)
AddHandler fcgid-script .php
# Este línea indica al servidor web donde está insalado php.
Fcgidinitialenv phprc "c:/php"
# Este línea indica al servidor web que debe ejecectar la applicación
# php-cgi.Exe Cuando Un Cliente (Navegador) Solicita Una Página Con
# extensión .php
Fcgidwrapper "c:/php/php-cgi.exe" .php
# Con este línea Damos los Permisos necesarios para que los os clientes puedan
# Acceder/Ejececar A Los Archivos .php

Os índices de opções seguem os links que incluem Execcgi
Allowoverride nenhum
Permitir de todos

16 anos atrás

Caso alguém esteja recebendo "cliente não suporta o protocolo de autenticação solicitado pelo servidor; considere a atualização do MySQL Client" Erro. O problema é o novo método de hash de senha usado por mysql> = 4.1 mencionado abaixo.

Atualize seu PHP para V5, onde o novo hash de senha é suportado ou use Old_Password () no MySQL 4.1.

Atualize o MySQL.Usuário SET senha = Old_Password ("YouroldhashPassword") onde User = 'YourUserId' e Host = 'YourHost'

9 anos atrás

$ spojeni = mysql_connect ($ server, $ login, $ pass) ou die ('nelze se pripojit');
mysql_select_db ($ db, $ spojeni);
mysql_query ("set nomes 'utf8'");
?>

15 anos atrás

Mysql_client_sssl não está funcionando, use mysqli e mysqli-> ssl_set ()

13 anos atrás

Espero que isso salve algum sofrimento a alguém.

Meu computador dev é Windows e executa o WampServer. Tenho problemas frequentes com o PHP incapaz de me conectar ao MySQL após períodos de atividade extrema de banco de dados.

Para encurtar a história, foi porque eu não estava executando o MySQL via nomeado-pipes e o Windows estava ficando sem portas disponíveis para servir PHP. Aparentemente, no Windows, você tem 5000 portas para trabalhar e, uma vez abertas, elas permanecem assim por 120 segundos antes de serem lançadas. Isso causa problemas com o mysql/networking porque uma nova porta é solicitada para cada conexão.

Você pode ler mais sobre o problema em:
(Link muito tempo e teve que ser quebrado)
http: // dev.mysql.com/doc/refman/5.0/en
/não é possível se conectar ao servidor.html#não pode-não-conectar-se-server-no-windows
?>

Como o MySQL está no host local, eu posso apenas ativar pipes nomeados (e é assim que você deve ter uma configuração MySQL se não precisar de rede) para contornar o problema em vez da solução alternativa listada nessa página.

20 anos atras

Apenas no caso de você não saber. Você pode usar o mysql_connect em uma função para se conectar a um banco de dados e a conexão é um super global. o que significa que você pode usar o mysql_query em outras funções ou em nenhuma função e o php usará a conexão que você abriu. Este é um conhecimento útil que ajuda se você tiver um site grande com muitos scripts. Se você criar uma função para se conectar a um banco de dados e chamar essa função em todos os seus scripts, facilita a manutenção mais fácil do código, pois você só precisa atualizar uma linha de código para alterar sua conexão MySQL em vez de atualizar todos os seus scripts individualmente.

15 anos atrás

O uso das conexões MySQL pode se tornar complicado com objetos. Estou usando o mysql_connect () em uma classe de banco de dados que eu escrevi e o destruidor de classe chama mysql_close. Porque eu tenho vários desses objetos de banco de dados, o mysql_connect reutiliza as conexões existentes. Isso é bom, exceto quando o script atingir o final da execução e a coleção Garabage da PHP chama todas as funções __Destruct (). mysql_close () lança um aviso de que a conexão é inválida, no meu caso para um objeto. Isso está acontecendo com objetos que usam uma conexão existente, pois a conexão já foi fechada. Resolvi o problema forçando o mysql_connect () a criar uma nova conexão a cada vez. Isso não é eficiente, mas é suficiente para meus propósitos por enquanto.

Eu não diria que isso é um bug por se, mas é algo para cuidar. Eu imagino que usar mysqli é a solução final.

15 anos atrás

Às vezes, quero que o serviço MySQL comece automaticamente quando meu aplicativo precisar. Isso é especialmente verdadeiro se você trabalhar em um PC de desenvolvimento e/ou em um pequeno ambiente de intranet.

Você pode fazer algo assim: se a função mysql_connect () retornar falsa, tente forçar a inicialização do serviço MySQL!

Por exemplo, no Windows:

$ link = @ mysql_connect ($ server, $ user, $ pass);
if (vazio ($ link)) @ Exec ("%Systemroot%\\ System32 \\ Net.exe start mysql ");
sono (5);
$ link = @ mysql_connect ($ servidor, $ usuario, $ clave);
>

?>

No Linux, é claro, você pode tentar "/etc/init.D/MySQLD Iniciar "Mas você precisará de permissões especiais.

16 anos atrás

Se entre a primeira e a segunda chamada com os mesmos argumentos, houve outra ligação com outro argumento, o link inicial de conexão não será reutilizado, mas a nova conexão é criada, independentemente do argumento newlink.

Por exemplo, aqui apenas um único link será aberto e depois reutilizado:
$ link1 = mysql_connect ("localhost");
$ link2 = mysql_connect ("localhost");
?>

e aqui _THree_ links separados serão abertos:
$ link1 = mysql_connect ("localhost");
$ link3 = mysql_connect ("127.0.0.1 ");
$ link2 = mysql_connect ("localhost");
?>

Portanto, se você quiser alternar entre conexões apenas por chamada para mysql_connect e confiar em seu cache interno de link, você pode desperdiçar suas conexões de banco de dados.

13 anos atrás

Sempre que você abre duas conexões para um único banco de dados,
É provável que você não receba nenhum erro ao selecionar o banco de dados não existente.

$ db1 = mysql_connect ( . );
mysql_select_db ('existing_db', $ db1);

$ db2 = mysql_connect ( . );
mysql_select_db ('não_existing_db', $ db2);

mysql_query (. , $ db2);
// não retornará erros e a consulta não será executada.
?>

Preste atenção e você pode economizar algumas horas de depuração.

Há 12 anos

Se você encontrar problemas de velocidade usando este comando em um servidor distante, poderá adicionar a linha "Skip-name-resolve" em seu meu meu.CNF para consertar.

19 anos atrás

Para usar os dados de carregamento da função infil.0.16, Php 4.3.3), defina o quinto parâmetro de mysql_connect () como client_local_files (128), que baseado na API MySQL C (também o arquivo de carga de suporte ao servidor MySQL, verifique por "Mostrar variáveis ​​como 'Local_infile'")

Agradeça 'phpweb no eden2 dot com' para apontar isso

16 anos atrás

A adição de entradas para httpd.conf para parar .Os arquivos INC que estão sendo servidos pelo Apache são certamente úteis e recomendados.

Mas isso não muda o fato de que esses arquivos devem ser legíveis pelo Apache para que o processador PHP possa obtê -los.

Contanto que você não tenha vários usuários múltiplos, possivelmente não confiáveis ​​em sua máquina, então tudo bem. Mas quando você está executando um grande serviço multiusuário com milhares de usuários, sempre é possível que um deles olhe para o seu .Arquivos inc. e tome uma nota das senhas que você tem nelas. Eles poderiam até copiá -los para seus próprios scripts e modificar seus bancos de dados!

Mesmo que os usuários locais sejam confiáveis, sempre existe a possibilidade de um script desonesto (PHP ou algum idioma mais desagradável) sendo instalado por um usuário ignorante. Esse script pode então ler o seu .arquivos inc (se estão ou não na árvore de publicação da web) e expõem sua senha.

19 anos atrás

Outra solução para os problemas de segurança de colocar nomes de usuário e senhas em scripts. Eu não encontrei isso documentado em nenhum outro lugar, então pensei que eu sugeriria para a documentação online. .

Não coloque senhas para MySQL em scripts que podem ser lidos por qualquer usuário na máquina. Em vez. (Apache lê seus principais arquivos de configuração como root.)

Por exemplo, adicione isso ao seu httpd.Conf (e Chmod para 600 ou 660) Em seguida, diga ao seu Apache para recarregar (Apachectl Graceful).


php_value mysql.default_user Fred
php_value mysql.Default_password Secret
php_value mysql.Default_host Server.exemplo.com

Então tudo o que você precisa no seu código PHP é

$ handle = mysql_connect () ou die (mysql_error ());

As senhas etc só serão escolhidas por scripts em execução no diretório nomeado (ou um subdiretório). O mesmo pode ser feito para vira.

Se você não deseja continuar recarregando seu servidor Apache, você está testando coisas que colocam as diretivas php_value em um (mundo legível pelo mundo) .arquivo htaccess. (Claramente não para uso da produção.)

Se você precisar depurar os valores que estão sendo fornecidos (ou não), use este trecho:

@syslog (log_debug, "Usando user =".ini_get ("mysql.usuário padrão").
"Pass =".ini_get ("mysql.senha padrão").
"host =".ini_get ("mysql.default_host "));

(Isso pressupõe que você não está executando em 'Safe_mode' e que você está em algum tipo de união.)

Há 12 anos

Minha situação: "Eu poderia me conectar ao MySQL a partir do PHP via Apache e MySQL via console MySQL, e não consegui conectar -se através do PHP"

Mas, o PHP só pode se conectar ao MySQL usando o mysql_connect ("localhost", "root", "senha");

"Seu Selinux não está permitindo que o Apache faça conexões remotas"

Solução:
setSeBool -P httpd_can_network_connect = 1

15 anos atrás

Recentemente, vi um problema obscuro em que eu poderia me conectar ao MySQL a partir do PHP via Apache e MySQL via console MySQL, e não consegui se conectar via Php-Cli. Isso foi no Windows (XP). Eu geralmente uso a extensão MySqli, mas também tentei MySQL, e ambos se recusaram a trabalhar.

Eu reiniciei o serviço várias vezes, e o php-cli ainda não se conectava.

Isso acabou esclarecendo.

Fiz questão de parar o serviço. Então, baixei uma embalagem binária com zíper de Dev.mysql.com e iniciei o servidor algumas vezes a partir da linha de comando (mySqld/mysqld-nt, onde o mysqld-nt é ajustado especificamente para o Windows) e o interrompeu ("mysqladmin Shutdown"). Consegui me conectar com sucesso do php -cli ("php -r" mysql_connect ('localhost', 'root', ''); ").

Certificando -se de que estava parado, eu iniciei o servidor regular da linha de comando, e isso foi bem -sucedido. Eu então parei e comecei através do painel de serviços, e tudo ainda funcionou.

Estou assumindo que, quando o serviço foi reiniciado inicialmente, havia um componente que havia morrido e se recusou a ser desligado, embora o serviço parecesse parado, mas desligando -o via mysqladmin matou tudo totalmente.

13 anos atrás

Observe que o tubo nomeado no Windows é inutilizável desde o PHP 5.3, e a conexão TCP deve ser usada mesmo em localhost.

16 anos atrás

O post de 'Graham_rule em Ed Dot AC Dot UK' deve incluir o seguinte aviso:

Waring: os valores dessas diretrizes serão expostos se algum código incluir a função phpinfo ().

A função phpinfo () imprimirá esses valores claros como dia. Eu sugiro altamente contra esse método de armazenar informações de autenticação MySQL.

Eu recomendo a criação de funções de conexão e limpeza em um arquivo incluído separado. Se a segurança é uma preocupação, localize o arquivo incluído fora da sua pasta da Web Root.

função getMyConnection ()
Global $ g_link;
if ($ g_link)
retornar $ g_link;
$ g_link = mysql_connect ('host.Nome ',' Usuário ',' Senha ') ou Die (' não conseguiu se conectar ao servidor.');
mysql_select_db ('database_name', $ g_link) ou die ('não pôde selecionar o banco de dados.');
retornar $ g_link;
>

função limpopdb ()
Global $ g_link;
se ($ g_link != false)
mysql_close ($ g_link);
$ g_link = false;
>

?>

Basta incluir sua connection.arquivo php em seu script e em qualquer lugar que você use a função mysql_query () inclua uma chamada para a função getMyConnection ().

$ res = mysql_query ("Selecione . ", GetMyConnection ());
?>

15 anos atrás

Se você estiver tentando abrir várias conexões MySQL com o mesmo usuário, senha e nome do host MySQL, você deve definir $ new_link = true para impedir que o mysql_connect use uma conexão existente.

Por exemplo, você está abrindo duas conexões separadas para dois bancos de dados diferentes (mas no mesmo host e com o mesmo usuário e senha):

$ db1 = mysql_connect ($ dbhost, $ dbuser, $ dbpass);
$ rv = mysql_select_db ($ dbname1, $ db1);
$ db2 = mysql_connect ($ dbhost, $ dbuser, $ dbpass);
$ rv = mysql_select_db ($ dbname2, $ db2);

Neste ponto, tanto o $ db1 quanto o $ db2 terão selecionado o banco de dados nomeado por $ dbname2.

A solução alternativa é exigir que a segunda conexão MySQL seja nova:

$ 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);

Agora, $ DB1 deveria ter selecionado $ dbname1 e $ db2 deveria ter selecionado $ dbname2.

Isso foi documentado na página mysql_select_db também.

Nota: Isso ocorre apenas quando os parâmetros de nome, nome de usuário e senha são idênticos para cada instrução mysql_connect.

11 anos atrás

Conexões portáteis: se você migrar seu código-fonte de um para servidores diferentes e gostaria de evitar a reconfiguração em um novo saque, use o sinalizador $ _server ['server_name'] como:

Switch ($ _Server ['Server_name']))
<
Case 'Server1.exemplo.com ':
mysqlConnect ('host1', 'user1', 'senha1');
mysql_select_db ('db1');
quebrar;
Case 'Server2.exemplo.com ':
mysqlConnect ('host2', 'user2', 'senha2');
mysql_select_db ('db2');
quebrar;
>
?>

Isso faz uma conexão condicional com o banco de dados MySQL. Ele escolhe automaticamente o servidor correto de acordo com o nome do servidor de onde seu script é executado.

Felizmente, você gosta desta configuração portátil.

16 anos atrás

Se você preferir usar um nome de host em vez de um IP na sua sequência de conexão em um script (para poder alterar o IP à vontade), mas não quer a sobrecarga das pesquisas do DNS, basta adicioná -lo ao seu arquivo/etc/hosts (no Windows: %windir %/system32/drivers/etc/hosts).

Por exemplo, adicione o seguinte arquivo ao seu hosts (alterando o IP falso para o IP real do seu servidor):

Nota: No Linux, verifique se você tem "Ordem: Hosts, Bind" no seu /etc /host.arquivo conf.

Em um script, faça a conexão MySQL como assim:

$ sid = mysql_connect ("mySqlServer1", "Usuário", "Pass");
?>

Nota: Esta amostra está no PHP, mas pode ser qualquer outra linguagem de programação (basta digitar "ping mySqlServer1" em um prompt, em seu servidor)

E aí está! Se o seu servidor for atribuído um IP diferente, basta atualizar o arquivo hosts com o novo (cada script funcionará como está, mesmo que em diferentes nomes de host).

10 anos atrás

Uma pequena nota se seus scripts dormem muito, você deseja executar exatamente a mesma instrução SQL 2 vezes e você tem o erro "MySQL foi embora muito.

Tente definir o quarto parâmetro como True, pois parece que às vezes o PHP não identifica esse ID X de recurso que ele usou para a última pesquisa idêntica agora é DUD e, portanto, tenta usá -lo, ignorando assim testes como IS_Resource () e causando uma falha.

Isto é para quando mysql_ping () não funciona para sua situação, é claro.

18 anos atrás

Em mysql4.1 e mais tarde, o formato de hash de senha padrão mudou, tornando -o incompatível com 3.x clientes.
Eu descobri que mysql_connect () funciona nas versões do servidor> = 4.1 Quando sua senha de usuário do MySQL está em branco porque a autenticação de senha não é feita nesse caso, caso contrário, você precisa usar outro método de conexão (e.g. mysqli).
Além disso, se você estiver usando tabelas antigas mysql em um novo servidor (i.e. As senhas são armazenadas no formato antigo), então o servidor usará o método antigo de autenticação automaticamente e essa função deve funcionar em todos os casos.
Espero que isso ajude alguém, me deixou confuso por um tempo porque alguns dos usuários no meu 4.1 servidor poderia se conectar e alguns não puderam.

16 anos atrás

Eu já me perguntou o que "nome de usuário padrão" é?
$ link = mysql_connect () ou die (mysql_error ());
$ resultado = mysql_query ("selecione session_user (), current_user ();");
$ row = mysql_fetch_row ($ resultado);
eco "Usuário da sessão:", $ Row [0], "
\ n ";
eco "Usuário atual:", $ Row [1], "
\ n ";
?>
Ambos são ODBC@localhost na minha instalação win2k, então meu conselho para o Windows é:
- Crie um usuário MySQL chamado ODBC sem senha
- Adicione localhost ao usuário do ODBC [clique com o botão direito do mouse ODBC]
- Defina o esquema preveileges como odbc@localhost
- use mysql_connect () sem parms, ou não use;)
Isso se transforma para trabalhar também com ODBC_Connect:
odbc_connect ("mydsn", "", "")

9 anos atrás

olá pessoal.
Use "127.0.0.1 "em vez de" localhost "para php5.4-win7 se você acha que a velocidade é lenta.Porque o win7 use o padrão IPv6.
"localhost" é para IPv4.

14 anos atrás

Eu só queria compartilhar um invólucro comum que eu uso para executar instruções SQL de uma linha. É um invólucro fácil de usar que cuida da conexão aberta/feche. Opcionalmente, o mysql_connect pode ser substituído por mysql_pconnect para conexões persistentes.

Função ExecuteQuery ($ Query, $ dB, $ nocon)
If ($ nocon != "nocon")
If ($ dB != "") Connect ($ dB);
else Connect ("Pascal_crm");

$ resultado = mysql_query ($ query);
$ err = mysql_error ();
se ($ err != "") eco "erro = $ err";

If ($ nocon != "nocon")
mysql_close ();
Retornar $ resultado;
>

17 anos atrás

Conecte -se ao MySQL via Pipe nomeado no Windows:

no meu.Ini, adicione isso:

Em seguida, conecte -se ao servidor e conecte -se ao MySQL usando

14 anos atrás

Quando você se conecta e espera usar um procedimento armazenado, você deve passar uma bandeira especial para o MySQL através do comando Connect, caso contrário, você não receberá os resultados retornados e isso resultará nesse erro:
Procedimento Alexgrim.Getstats_forumcategories não pode retornar um conjunto de resultados no contexto fornecido

Para corrigir isso, altere sua sequência de conexão, adicionando ", false, 65536" como os últimos 2 campos:
$ this-> con

13 anos atrás

Se você estiver recebendo um erro "Não é possível atribuir endereço solicitado", você pode ter um problema com a porta MySQL. Acabei de mudar meu servidor para o Mac OS X 10.6 e mysql_connect estava dando este erro. Entrando no /etc /php.arquivo ini e definir o número da porta padrão como 3306 corrigiu o problema.

O php.O arquivo INI sugere que o PHP selecionará a porta usando o $ mysql_tcp_port ou a entrada MySQL-TCP em /etc /Services, mas neste caso não é assim. /etc/serviços na minha máquina tem 3306 listados, mas não foi apanhada.

Isso é uma espécie de relatório de bug, pois o recurso documentado não está funcionando. Por favor, não exclua isso até que a comunidade decida como resolver o problema. Este é um daqueles exercícios de puxão de cabelo para serem consertados.

13 anos atrás

Se você está recebendo erros do MySQL como #2006: o MySQL Server foi embora, e você está usando o mysql_connect () e pcntl_fork (), faça a Shure que está se reconectando ao servidor MySQL com cada criança criada que você formar.

Eu puxei meu cabelo para fora por muitos dias porque estava usando a mesma conexão MySQL para cada criança e estava recebendo que "MySQL Server foi embora" erros.

Aqui está um exemplo simples:
$ link = mysql_connect ($ db_server, $ db_user, $ db_pass);
mysql_select_db ($ db_database, $ link));

$ pid = pcntl_fork ();
if ($ pid == - 1)
// Erro à berrugada da criança
elseif ($ pid) // pai estará aqui
> else // A criança tem para obter uma * nova conexão MySQL.
// se você usar mysql_connect sem o 4º parâmetro
// então ele usará a conexão do pai. Mas
// Se a criança morrer, a conexão será inviável em
// o pai também.
// Então, observe o "true" como 4º parâmetro.
$ newlink = mysql_connect ($ db_server, $ db_user, $ db_pass, true);
mysql_select_db ($ db_database, $ newlink));
// .
>
?>

15 anos atrás

[Editar de Danbrown na Php Dot Net: o problema que este usuário está ilustrando é um problema comum ao lidar com vários bancos de dados do PHP. Observe seus comentários no final do código para uma explicação.]

Parece que aprendi isso da maneira mais difícil:

// Estabeleça conexão com o servidor DB Master
mysql_connect (db_host, db_user, db_password);
mysql_select_db (db_name);

// Estabeleça conexão com o cluster de escravos somente leitura
$ objmysql_read = mysql_connect (slave_db_host, slave_db_user, slave_db_password);
mysql_select_db (db_name, $ objmysql_read);

$ strsql = "Selecione col1, col2 de" . Db_name . "." . "Tbl1 onde 1 = 1";

$ objrs = mysql_query ($ strsql, $ objmysql_read); // retorna dados de escravos

$ strsql = "Insira em" . Db_name . "." . "TBL1 (col1, col2) valores (Val1, Val2)";

// comportamento esperado, para inserir a última declaração no mestre db, pois não faz referência ao recurso somente leitura explicitamente. Em vez disso, ele insere o registro na última conexão, mesmo que não deva, já que a última conexão não é uma conexão global/anônima como a primeira, é $ objmysql_read.

// Você sairá do Sync DB's através do seu cluster, a menos que definir explicitamente todos os recursos de conexão

11 anos atrás

Depois de atualizar o MySQL sever para 5.5.21 de 5.0.9 No CentOS, meu Winxp parou de poder se conectar com o host com a mensagem de erro
'Bad Handshake'.

A solução eventual para o problema foi remover o mysql_client_ssl da chamada para mysql_connect ().

Eu também relatarei isso como um bug.

14 anos atrás

Se você tentando se conectar a um servidor remoto, aqui estão algumas coisas que podem dar errado. Talvez esta lista salve alguém algum tempo:

1. Pode ser necessário entrar em contato com o suporte técnico do servidor remoto:

a. para garantir que você possa passar pelo firewall. Não é necessariamente suficiente ter o número do seu servidor listado na lista de hosts de acesso remoto CPALEL do site do destinatário. Depende de como a empresa do servidor tem as coisas configuradas;

b. Para descobrir qual número de porta eles estão usando para conexões de banco de dados, que podem não ser o padrão usado por mysql_connect;

c. Se você estiver usando o ODBC, o host ao qual você está tentando se conectar pode ou não ter algum drivers ODBC instalado; e

d. Se você estiver trabalhando com um IP dinâmico, eles podem ser configurados para acomodá -lo, ou pode ter que usar um proxy. Veja http: // forge.mysql.com/wiki/mysql_proxy .

2. Se você está trabalhando em um servidor compartilhado, o número do servidor que você foi enviado na letra de inscrição provavelmente não é o número do servidor que você deve usar para se conectar a um banco de dados remoto. Você precisa do número do servidor da máquina em que seu site está sentado, não o número do servidor de conta virtual nessa máquina. Você pode obter isso do seu próprio suporte técnico.

Sou grato a Jonathan Jones em Bluehost por esta análise.