web:php:requetesmysql
Table des matières
Requêtes MySQL avec PHP
Une des fonctions intéressantes dans PHP, est sa facilité d'utilisation avec les bases de données MySQL. Beaucoup d'exemples seront donnés dans cette page.
Il faut noter que l'utilisation de requêtes SQL directement dans le code PHP n'est pas une pratique recommandée. Une utilisation de framework tel que CakePHP, ZendFramework, Symphony peut s'avérer fort utile dans ces cas-là.
Connexion
D'abord, il faut connecter à la base de données MySQL. Il faut spécifier quatre paramètres dans deux instructions.
Paramètre | Signification |
---|---|
$host | Adresse du serveur de la BD (souvent localhost ) |
$user | Nom d'usagé qui a accès à la BD |
$pass | Mot de passe associé à l'usager |
$db | Nom de la base de donnée à sélectionner |
$connection = mysql_connect($host, $user, $pass) or die ("Impossible de connecter !"); mysql_select_db($db) or die ("Impossible de sélectionner la base de donnée !");
Requête pour chercher un seul résultat
$query = "SELECT * FROM users WHERE usr_id = '$usertofind' LIMIT 1"; $result = mysql_query($query) or die ("Erreur dans la requete: $query. " . mysql_error()); $user = mysql_fetch_object($result);
Requête pour chercher plusieurs résultats
Dans cet exemple, plusieurs résultats sont retournés par la requête et ils seront traités dans une boucle while
.
$query = "SELECT * FROM events WHERE evt_afficher > 0 ORDER BY evt_date_begin ASC"; $result = mysql_query($query) or die ("Erreur dans la requete: $query. " . mysql_error()); $nb_evt = 0; // compte les events while($evenement = mysql_fetch_object($result)) { ?> <div class="evt_encadre"> <div class="evt_titre"><b><? echo $evenement->evt_titre; ?></b></div> <div class="evt_normal"><? echo nl2br($evenement->evt_description); ?></div> <div class="evt_infos">Quand : Le <? echo timestampToDateHeureFr($evenement->evt_dateheure); ?></div> <div class="evt_infos">Site Internet : <a href="<? echo $evenement->evt_url; ?>"><? echo $evenement->evt_url; ?></a></div> </div> <?php $nb_evt++; }
Pour compter le nombre de résultats
Il peut être intéressant de savoir combien de résultats une requête a retourné.
//trouve le nombre de commentaires $query = "SELECT com_id FROM commentaires WHERE com_actif = 1"; $result = mysql_query($query) or die ("Erreur dans la requete: $query. " . mysql_error()); $nb_commentaires = mysql_num_rows($result);
Ajouter un enregistrement
$query_sta = "INSERT INTO clients(code, nom, prenom, tel, date_ajout) VALUES('$code', '$nom', '$prenom', '$tel', NOW())"; $result_sta = mysql_query($query_sta) or die ("Erreur dans la requete: $query_sta. " . mysql_error());
Modification
$query = "UPDATE films SET titre = '$titre', titreoriginal = '$titreoriginal', volume = '$volume', volume2 = '$volume2', imageurl = '$imageurl', synopsis = '$synopsis', origine = '$origine', genre = '$genre', classification = '$classification', duree = '$duree', annee = '$annee', realisateur = '$realisateur', acteurs = '$acteurs', langue = '$langue', soustitres = '$soustitres', cote = '$cote', cotep = '$cotep', format = '$format', parties = '$parties', site = '$site', dateajout = NOW() WHERE id = '$id'"; $result = mysql_query($query) or die ("Erreur dans la requete: $query. " . mysql_error());
Blob
<?php $db_host = 'localhost'; // don't forget to change $db_user = 'mysql-user'; $db_pwd = 'mysql-password'; $database = 'test'; $table = 'ae_gallery'; // use the same name as SQL table $password = '123'; // simple upload restriction, // to disallow uploading to everyone if (!mysql_connect($db_host, $db_user, $db_pwd)) die("Can't connect to database"); if (!mysql_select_db($database)) die("Can't select database"); // This function makes usage of // $_GET, $_POST, etc... variables // completly safe in SQL queries function sql_safe($s) { if (get_magic_quotes_gpc()) $s = stripslashes($s); return mysql_real_escape_string($s); } // If user pressed submit in one of the forms if ($_SERVER['REQUEST_METHOD'] == 'POST') { // cleaning title field $title = trim(sql_safe($_POST['title'])); if ($title == '') // if title is not set $title = '(empty title)';// use (empty title) string if ($_POST['password'] != $password) // cheking passwors $msg = 'Error: wrong upload password'; else { if (isset($_FILES['photo'])) { @list(, , $imtype, ) = getimagesize($_FILES['photo']['tmp_name']); // Get image type. // We use @ to omit errors if ($imtype == 3) // cheking image type $ext="png"; // to use it later in HTTP headers elseif ($imtype == 2) $ext="jpeg"; elseif ($imtype == 1) $ext="gif"; else $msg = 'Error: unknown file format'; if (!isset($msg)) // If there was no error { $data = file_get_contents($_FILES['photo']['tmp_name']); $data = mysql_real_escape_string($data); // Preparing data to be used in MySQL query mysql_query("INSERT INTO {$table} SET ext='$ext', title='$title', data='$data'"); $msg = 'Success: image uploaded'; } } elseif (isset($_GET['title'])) // isset(..title) needed $msg = 'Error: file not loaded';// to make sure we've using // upload form, not form // for deletion if (isset($_POST['del'])) // If used selected some photo to delete { // in 'uploaded images form'; $id = intval($_POST['del']); mysql_query("DELETE FROM {$table} WHERE id=$id"); $msg = 'Photo deleted'; } } } elseif (isset($_GET['show'])) { $id = intval($_GET['show']); $result = mysql_query("SELECT ext, UNIX_TIMESTAMP(image_time), data FROM {$table} WHERE id=$id LIMIT 1"); if (mysql_num_rows($result) == 0) die('no image'); list($ext, $image_time, $data) = mysql_fetch_row($result); $send_304 = false; if (php_sapi_name() == 'apache') { // if our web server is apache // we get check HTTP // If-Modified-Since header // and do not send image // if there is a cached version $ar = apache_request_headers(); if (isset($ar['If-Modified-Since']) && // If-Modified-Since should exists ($ar['If-Modified-Since'] != '') && // not empty (strtotime($ar['If-Modified-Since']) >= $image_time)) // and grater than $send_304 = true; // image_time } if ($send_304) { // Sending 304 response to browser // "Browser, your cached version of image is OK // we're not sending anything new to you" header('Last-Modified: '.gmdate('D, d M Y H:i:s', $ts).' GMT', true, 304); exit(); // bye-bye } // outputing Last-Modified header header('Last-Modified: '.gmdate('D, d M Y H:i:s', $image_time).' GMT', true, 200); // Set expiration time +1 year // We do not have any photo re-uploading // so, browser may cache this photo for quite a long time header('Expires: '.gmdate('D, d M Y H:i:s', $image_time + 86400*365).' GMT', true, 200); // outputing HTTP headers header('Content-Length: '.strlen($data)); header("Content-type: image/{$ext}"); // outputing image echo $data; exit(); } ?> <html><head> <title>MySQL Blob Image Gallery Example</title> </head> <body> <?php if (isset($msg)) // this is special section for // outputing message { ?> <p style="font-weight: bold;"><?=$msg?> <br> <a href="<?=$PHP_SELF?>">reload page</a> <!-- I've added reloading link, because refreshing POST queries is not good idea --> </p> <?php } ?> <h1>Blob image gallery</h1> <h2>Uploaded images:</h2> <form action="<?=$PHP_SELF?>" method="post"> <!-- This form is used for image deletion --> <?php $result = mysql_query("SELECT id, image_time, title FROM {$table} ORDER BY id DESC"); if (mysql_num_rows($result) == 0) // table is empty echo '<ul><li>No images loaded</li></ul>'; else { echo '<ul>'; while(list($id, $image_time, $title) = mysql_fetch_row($result)) { // outputing list echo "<li><input type='radio' name='del' value='{$id}'>"; echo "<a href='{$PHP_SELF}?show={$id}'>{$title}</a> – "; echo "<small>{$image_time}</small></li>"; } echo '</ul>'; echo '<label for="password">Password:</label><br>'; echo '<input type="password" name="password" id="password"><br><br>'; echo '<input type="submit" value="Delete selected">'; } ?> </form> <h2>Upload new image:</h2> <form action="<?=$PHP_SELF?>" method="POST" enctype="multipart/form-data"> <label for="title">Title:</label><br> <input type="text" name="title" id="title" size="64"><br><br> <label for="photo">Photo:</label><br> <input type="file" name="photo" id="photo"><br><br> <label for="password">Password:</label><br> <input type="password" name="password" id="password"><br><br> <input type="submit" value="upload"> </form> </body> </html>
web/php/requetesmysql.txt · Dernière modification : 2022/02/02 00:42 de 127.0.0.1