Latest web development tutorials
×

PHP curso

PHP curso PHP breve introdução PHP instalar PHP gramática PHP variável PHP echo/print PHP Tipos de dados PHP constante PHP corda PHP operadores PHP If...Else PHP Switch PHP ordem PHP Classificação de uma matriz PHP superglobais PHP While circulação PHP For circulação PHP função PHP Variáveis ​​mágicas PHP namespaces PHP Object-Oriented

PHP formulário

PHP formulário PHP Autenticação de formulários PHP formulário - campos obrigatórios PHP formulário - -mail de verificação e URL PHP instância de formulário completo PHP $_GET variável PHP $_POST variável

PHP Tutorial avançado

PHP arrays multidimensionais PHP data PHP conter PHP arquivo PHP Carregar arquivo PHP Cookie PHP Session PHP E-mail PHP segurança E-mail PHP Error PHP Exception PHP filtro PHP Filtro avançado PHP JSON

PHP 7 novos Recursos

PHP 7 novos Recursos

PHP banco de dados

PHP MySQL breve introdução PHP MySQL conexão PHP MySQL Criação de um banco de dados PHP MySQL Criar uma tabela de dados PHP MySQL inserir dados PHP MySQL Inserir dados múltiplos PHP MySQL instruções preparadas PHP MySQL ler dados PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX breve introdução AJAX PHP AJAX banco de dados AJAX XML AJAX busca em tempo real AJAX RSS Reader AJAX voto

PHP manual de referência

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP Processamento de imagem PHP RESTful

PHP DOP preparado declarações e procedimentos armazenados

Manual do PHP DOP Referência Manual do PHP DOP Referência

Muitos bancos de dados mais maduros apoiar o conceito de declarações preparadas.

O que é instruções preparadas? Pense nisso como um modelo compilado que deseja executar SQL, que podem ser personalizados usando parâmetros variáveis. declarações preparadas oferecem duas vantagens principais:

  • Consultar apenas resolve (ou pré-tratamento), uma vez, mas pode ser executada várias vezes com o mesmo ou diferentes parâmetros. Quando a consulta estiver pronta, o banco de dados irá analisar, compilar e executar o plano de otimização de consulta. Para consultas complexas, esse processo leva um longo tempo, se você precisa de ser repetido várias vezes com parâmetros diferentes a mesma consulta, em seguida, o processo irá reduzir muito a velocidade da aplicação. Usando a evitar declaração preparada repetindo analisar / compilação ciclo / optimize. Em suma, preparou demonstrações usar menos recursos e, assim, correr mais rápido.
  • Fornecer parâmetros para instruções preparadas não precisa usar aspas, o driver será feito automaticamente. Se a aplicação utiliza apenas instruções preparadas, podemos garantir que nenhuma injeção SQL. (No entanto, se as outras partes da consulta não é escapado da entrada para construir, em seguida, ainda existe o risco de injecção SQL).

declarações preparadas tão úteis que eles só apresentam é o processamento analógico quando o motorista não suporta o DOP. Isso garante que, independentemente de o banco de dados tem uma função, você pode garantir que os aplicativos podem usar os mesmos padrões de acesso a dados.

inserção PreparedStatements repetido

O exemplo a seguir, substituindo o espaço reservado nome apropriado com o nome e valor para executar uma consulta de inserção

<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);

// 插入一行
$name = 'one';
$value = 1;
$stmt->execute();

//  用不同的值插入另一行
$name = 'two';
$value = 2;
$stmt->execute();
?>

inserção PreparedStatements repetido

O exemplo a seguir, substituindo o nome eo valor? Espaços reservados para executar uma consulta de inserção.

<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// 插入一行
$name = 'one';
$value = 1;
$stmt->execute();

// 用不同的值插入另一行
$name = 'two';
$value = 2;
$stmt->execute();
?>

Obter dados usando instruções preparadas

O exemplo a seguir na forma de chave de acesso à base de dados já fornecidos. A entrada do usuário é automaticamente colocado entre aspas, por isso não há risco de ataques de injeção SQL.

<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name']))) {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}
?>

Se o suporte de driver de banco de dados, a aplicação também pode vincular parâmetros de entrada e saída parâmetros de saída são normalmente utilizados para obter valores a partir do procedimento armazenado. Parâmetros de saída de usar do que os parâmetros de entrada para ser um pouco mais complicado, porque quando se ligar a um parâmetro de saída, você deve conhecer os parâmetros de um determinado comprimento. Se o valor para o parâmetro é maior do que as recomendações de ligação do comprimento, irá gerar um erro.

Chamar um procedimento armazenado com um parâmetro de saída

<?php
$stmt = $dbh->prepare("CALL sp_returns_string(?)");
$stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000); 

// 调用存储过程
$stmt->execute();

print "procedure returned $return_value\n";
?>

Você também pode especificar ambos os valores de entrada e saída dos parâmetros, a sintaxe é semelhante a parâmetros de saída. No próximo exemplo, a string "Olá" é passado para o procedimento armazenado quando o procedimento armazenado retorna, Olá é substituído com o valor de retorno do procedimento armazenado.

Com entrada / saída parâmetros para chamar um procedimento armazenado

<?php
$stmt = $dbh->prepare("CALL sp_takes_string_returns_string(?)");
$value = 'hello';
$stmt->bindParam(1, $value, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); 

// 调用存储过程
$stmt->execute();

print "procedure returned $value\n";
?>

Uso inválido de espaço reservado

<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE '%?%'");
$stmt->execute(array($_GET['name']));

// 占位符必须被用在整个值的位置
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE ?");
$stmt->execute(array("%$_GET[name]%"));
?>

Manual do PHP DOP Referência Manual do PHP DOP Referência