2016-07-16 1 views
0

J'utilise PDO avec PHP pour soumettre des requêtes à mon serveur SQL. Je dois utiliser la clause LIKE pour vérifier un nom d'utilisateur pour assurer qu'il est autorisé (par exemple, il ne contient pas de mots interdits), donc je suis en utilisant cette requête SQL ...SQL throw Syntaxe Erreur lors de l'utilisation de LIKE avec les paramètres

SELECT * FROM `table` WHERE (`name` LIKE %?%); 

Je suis alors INSERTION DE le paramater avec PDO plus tard comme ça ...

$statement->bindParam(1, $username) 

lorsque je tente de lancer cela, je reçois cette erreur ...

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '%'dibdibs'%)' at line 1' in C:\xampp\htdocs\scripts\sql.php:57 Stack trace: #0 C:\xampp\htdocs\scripts\sql.php(57): PDOStatement->execute() #1 C:\xampp\htdocs\api\users.php(30): dibdibs\pdo->query('SELECT * FROM `...', Array) #2 {main} thrown in C:\xampp\htdocs\scripts\sql.php on line 5

le code AOP fonctionne très bien pour d'autres requêtes, quand je suis en utilisant = au lieu de f LIKE, mais lance l'erreur ci-dessus lorsque j'essaie d'utiliser la clause LIKE.

J'ai mis mon code complet sur Pastebin, si vous avez besoin de le vérifier. J'utilise GET pour obtenir des données, comme je l'utilise avec AJAX (qui fonctionne aussi bien), mais le nom d'utilisateur que j'ai essayé est 'dibdibs', qui fonctionne bien dans d'autres requêtes.

+4

Utiliser le nom 'comme?' Et se lient alors quelque chose comme ceci '$ Instruction-> bindParam (1, « % $ username% ")' –

+1

imo, place toujours l'espace réservé entouré d'espaces. Il est clair pour le programmeur et l'analyseur que c'est un jeton unique. Et rend la lecture du code plus facile? –

Répondre

1

Utiliser cet

U peut utiliser l'une de ces deux

$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?'); 
$query->execute(array('%value%')); 

while ($results = $query->fetch()) 
{ 
    echo $results['column']; 
} 

// without loop 

$query = "SELECT * FROM tbl WHERE address LIKE ?"; 
$params = array("%$var1%"); 
$stmt = $handle->prepare($query); 
$stmt->execute($params);