2010-10-13 9 views
0

désolé si c'est une question de base! jusqu'à maintenant je suis en train de créer des requêtes MySQL en PHP et en passant à travers les variables au sein de l'appel sql comme ceci:MySQL passant variable à la requête dynamique

$myparam = $_GET["id_tbl"]; 

mysql_select_db($database_camerich, $camerich); 
$query_rs_table = sprintf("SELECT * FROM table_tbl WHERE idimg_tbl = ".$myparam." ORDER BY order_tbl "; 
$rs_table = mysql_query($query_rs_table, $camerich) or die(mysql_error()); 
$row_rs_table = mysql_fetch_assoc($rs_table); 
$totalRows_rs_table = mysql_num_rows($rs_table); 

J'ai réussi à créer cela sur le serveur comme table_view (sans filtre) que je suis capable de reprendre ok.

mysql_select_db($database_camerich, $camerich); 
    $query_rs_table = sprintf("SELECT * FROM table_view"; 
    $rs_table = mysql_query($query_rs_table, $camerich) or die(mysql_error()); 
    $row_rs_table = mysql_fetch_assoc($rs_table); 
    $totalRows_rs_table = mysql_num_rows($rs_table); 

Je filtrer ceci:

$query_rs_table = sprintf("SELECT * FROM table_view WHERE idimg_tbl = ".$myparam.""; 

je voudrais savoir comment mettre en place un filtre sur la requête dynamiquement sur le serveur plutôt que de filtrer les résultats en php après la requête est renvoyée .

J'espère que cela a du sens.

grâce

+2

Pas une réponse à votre question, mais votre script est vulnérable par [injection SQL] (http://stackoverflow.com/questions/568995/best-way-to-defend-against-mysql-injection-and -cross-site-scripting) - vous devez corriger cela –

+0

Et, ne filtrez-vous pas déjà la requête? Je ne suis pas sûr de comprendre ce que vous voulez faire –

+0

Merci pour cette pecca, ce n'est pas le code que j'utilise, était juste pour donner un exemple, je peux filtrer la requête avec php mais je veux que le serveur sql filtre les données avant son renvoi au clent. mais je ne sais pas comment passer les valeurs à mysql afin qu'il sache quoi filtrer par –

Répondre

1

Voici quelques suggestions que je l'espère, vous allez essayer dans l'ordre:

  1. Passer à l'aide de PDO pour votre accès à la base - PDO est une interface d'accès de base de données plus moderne et il est orienté objet Il prend également en charge les déclarations préparées. - http://www.php.net/manual/en/book.pdo.php
  2. Basculez votre vue vers une procédure stockée. Les vues MySQL ne prennent pas de paramètres. Les vues ont également d'autres limitations comme indiqué ici: http://dev.mysql.com/doc/refman/5.1/en/create-view.html. Les procédures stockées acceptent des paramètres et peuvent être appelés via PDO: http://php.net/manual/en/pdo.prepared-statements.php
  3. Tout cela étant dit, vous devriez vraiment évaluer si vous vraimentbesoin une procédure stockée.
+0

merci pour ce wilmoore, je vais lire à propos de pdo, au moment où je suis en train d'essayer d'apprendre sur les procédures stockées, et comment ils fonctionnent, j'ai donc un autre outil dans ma boîte pour ainsi dire! Je suppose que les procédures stockées sont probablement les meilleures pour mettre à jour des enregistrements, plutôt que d'obtenir des données de type filterd, car appeler une vue puis la filtrer via php n'est pas une grosse difficulté. –