2017-06-30 4 views
0

J'ai un formulaire de recherche dans lequel l'utilisateur peut rechercher un numéro de série ou un nom de produit.Déclaration préparée PDO et valeurs multiples SQL LIKE

Voici mon code:

<?php 
require_once "pdo_rothConn.php"; 

if (isset($_POST['searchText'])){ 

$sql = "SELECT m_ipdb, m_name FROM machine WHERE 'm_ipdb' LIKE :number OR 'm_name' LIKE :name"; 
$stmt = $dbh->prepare($sql); 
$stmet->execute(array(
    ':number' => $_POST['searchText'], 
    ':name' => $_POST['searchText'])); 

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
echo($row['m_ipdb']); 
echo($row['m_name']); 
} 
?> 

<p>Search for a Machine</p> 
<form method="post"> 
<table width="500" border="1"> 
<tr> 
    <td>Enter IPDB Number or Name:</td> 
    <td><input name="searchText" type="text" id="searchText" /></td> 
</tr> 
<tr> 
    <td colspan="2"><input type="submit" value="Search Database"></td> 
    <td><a href="#">Cancel</a></p></td> 
</tr> 
    </table> 
    </form> 
    </body> 
    </html> 

D'abord, est-il une façon plus concise que je peux écrire mon instruction SQL puisque la valeur $ _POST Je cherche est le même? Je n'étais pas sûr s'il y avait une erreur dans mon instruction SQL aussi avec les multiples instructions LIKE.

A partir de maintenant la page résultante est vide et ne fonctionne pas du tout. J'ai pensé diviser le code en une page et une page de traitement au lieu d'une page post-retour. Je suis coincé. Mais j'ai posé cette question avant que j'apprenne à propos de PDO et des déclarations préparées et ai reçu la rétroaction pour apprendre des états préparés/paramétrés. Le code résultant protège-t-il également contre l'injection SQL?

Merci.

+0

Avez-vous essayé d'exécuter la requête en SQL si elle renvoie ce dont vous avez vraiment besoin? – Swellar

+0

Et je pense que deux 'LIKE' dans une seule requête est une erreur – Swellar

+0

@Swellar ce n'est certainement pas – Phil

Répondre

2

$ stmet-> exécuter à $ stmt-> exécuter?