Latest web development tutorials
×

PHP curso

PHP curso PHP breve introducción PHP instalar PHP gramática PHP variable PHP echo/print PHP Tipos de datos PHP constante PHP cadena PHP operadores PHP If...Else PHP Switch PHP formación PHP Ordenación de un conjunto PHP superglobals PHP While circulación PHP For circulación PHP función PHP Las variables mágicas PHP Los espacios de nombres PHP Orientado a Objetos

PHP formulario

PHP formulario PHP autenticación de formularios PHP formulario - Los campos necesarios PHP formulario - correo electrónico de verificación y la URL PHP instancia completa formulario PHP $_GET variable PHP $_POST variable

PHP Tutorial avanzado

PHP Las matrices multidimensionales PHP fecha PHP contener PHP expediente PHP Cargar archivo PHP Cookie PHP Session PHP E-mail PHP seguridad E-mail PHP Error PHP Exception PHP filtro PHP filtro avanzado PHP JSON

PHP 7 nuevas características

PHP 7 nuevas características

PHP base de datos

PHP MySQL breve introducción PHP MySQL conexión PHP MySQL La creación de una base de datos PHP MySQL Crear una tabla de datos PHP MySQL insertar datos PHP MySQL Insertar datos múltiples PHP MySQL Sentencias preparadas PHP MySQL leer datos 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 introducción AJAX PHP AJAX base de datos AJAX XML AJAX búsqueda en tiempo real AJAX RSS Reader AJAX voto

PHP Manual de referencia

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 Procesamiento de imágenes PHP RESTful

PHP DOP declaraciones preparadas y procedimientos almacenados

Manual de PHP DOP Referencia Manual de PHP DOP Referencia

Muchas bases de datos más maduros apoyan el concepto de declaraciones preparadas.

Lo que es declaraciones preparadas? Piense en ello como una plantilla compilada desea ejecutar SQL, que puede personalizarse usando los parámetros variables. declaraciones preparadas ofrecen dos ventajas principales:

  • Consulta sólo resuelve (o pretratamiento) una vez, pero se pueden ejecutar varias veces con los mismos o diferentes parámetros. Cuando la consulta está listo, la base de datos va a analizar, compilar y ejecutar el plan de optimización de consultas. Para consultas complejas, este proceso lleva mucho tiempo, si tiene que ser repetido muchas veces con diferentes parámetros de la misma consulta, entonces el proceso reducirá en gran medida la velocidad de la aplicación. Mediante el uso de la declaración preparada a evitar la repetición de analizar / compilar ciclo / Optimizar. En resumen, preparan estados utilizan menos recursos y por lo tanto se ejecuten más rápidamente.
  • Proporcionar parámetros a los comandos preparados no tienen que usar comillas, el conductor será manejado de forma automática. Si la aplicación sólo utiliza comandos preparados, podemos asegurar que ninguna de inyección SQL. (Sin embargo, si otras partes de la consulta no se escaparon de la entrada de construir, entonces todavía hay el riesgo de inyección de SQL).

declaraciones preparadas tan útiles que sólo característica es el procesamiento analógico cuando el conductor no es compatible con la DOP. Esto asegura que, independientemente de si la base de datos tiene una función, puede asegurarse de que las aplicaciones puedan utilizar los mismos patrones de acceso a datos.

PreparedStatements inserción repetida

En el siguiente ejemplo, sustituyendo el nombre de marcador de posición apropiada con el nombre y valor para ejecutar una consulta de inserción

<?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();
?>

PreparedStatements inserción repetida

El siguiente ejemplo mediante la sustitución de nombre y valor? Marcadores de posición para ejecutar una consulta de inserción.

<?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();
?>

Obtener datos utilizando sentencias preparadas

El siguiente ejemplo en la forma de acceso basado en clave a los datos ya proporcionado. La entrada del usuario se incluye de forma automática entre comillas, lo que no hay riesgo de ataques de inyección SQL.

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

Si el soporte de controlador de base de datos, la aplicación también se puede unir parámetros de entrada y salida de parámetros de salida se utilizan normalmente para obtener los valores del procedimiento almacenado. Los parámetros de salida de usar que los parámetros de entrada a ser un poco más complicado, debido al enlazar un parámetro de salida, es necesario conocer los parámetros de una determinada longitud. Si el valor del parámetro es mayor que las recomendaciones vinculantes de la longitud, se generará un error.

Llamar a un procedimiento almacenado con un parámetro de salida

<?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";
?>

También puede especificar ambos valores de entrada y de salida de los parámetros, la sintaxis es similar a los parámetros de salida. En el siguiente ejemplo, la cadena "hola" se pasa al procedimiento almacenado cuando se restablezca el procedimiento almacenado, hola se reemplaza con el valor devuelto por el procedimiento almacenado.

Con la entrada / parámetros de salida para llamar a un procedimiento almacenado

<?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 no válido de marcador de posición

<?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 de PHP DOP Referencia Manual de PHP DOP Referencia