Bonjour,

PHP 7.3.10
Extension pdo sqlserveur

J'ai besoin de faire une requête préparée avec LIKE.
bindParam, bindValue, directement dans execute : j'ai essayé différentes solutions trouvées sur le net, mais aucune ne fonctionne.
[EDIT] : j'ai finalement trouvé une solution, voir en fin de ce message.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
$query = "SELECT c1, c2
FROM table
WHERE c1 LIKE '%:mot%' OR c2 LIKE  '%:mot%';";
 
$stmt = $dbh->prepare($query);
$stmt->bindParam(':mot', $expression, PDO::PARAM_STR, 20);
$stmt->execute();
Erreur
Tried to bind parameter number 65536. SQL Server supports a maximum of 2100 parameters.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
$query = "SELECT c1, c2
FROM table
WHERE c1 LIKE CONCAT('%', :mot, '%') OR c2 LIKE CONCAT('%', :mot, '%');";
 
$stmt = $dbh->prepare($query);
$stmt->bindParam(':mot', $expression, PDO::PARAM_STR, 20);
$stmt->execute();
Erreur
[Microsoft][ODBC Driver 17 for SQL Server]Champ COUNT incorrect ou erreur de syntaxe

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
$query = "SELECT c1, c2
FROM table
WHERE c1 LIKE :mot OR c2 LIKE :mot;";
 
$stmt = $dbh->prepare($query);
$stmt->bindParam(':mot', '%'.$expression.'%', PDO::PARAM_STR, 22);
$stmt->execute();
Erreur
Fatal error: Uncaught Error: Cannot pass parameter 2 by reference

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
$query = "SELECT c1, c2
FROM table
WHERE c1 LIKE :mot OR c2 LIKE :mot;";
 
$stmt = $dbh->prepare($query);
$expression = '%'.$expression.'%';
$stmt->bindParam(':mot', $expression, PDO::PARAM_STR, 22);
$stmt->execute();
Erreur
[Microsoft][ODBC Driver 17 for SQL Server]Champ COUNT incorrect ou erreur de syntaxe

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
$query = "SELECT c1, c2
FROM table
WHERE c1 LIKE :mot OR c2 LIKE :mot;";
 
$stmt = $dbh->prepare($query);
$stmt->execute(array(':mot' => '%'.$arametre[4] . '%'));
Erreur
[Microsoft][ODBC Driver 17 for SQL Server]Champ COUNT incorrect ou erreur de syntaxe



Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
$query = "SELECT c1, c2
FROM table
WHERE c1 LIKE :mot1 OR c2 LIKE :mot2;";
 
$stmt = $dbh->prepare($query);
$stmt->bindParam(':mot1', $expression, PDO::PARAM_STR, 20);
$stmt->bindParam(':mot2', $expression, PDO::PARAM_STR, 20);
$stmt->execute();
Erreur
Warning: Uncaught PDOException: SQLSTATE[42000]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Syntaxe incorrecte vers 'OUTPUT'



Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
$query = "SELECT c1, c2
FROM table
WHERE c1 LIKE :mot1 OR c2 LIKE :mot2;";
 
$stmt = $dbh->prepare($query);
$stmt->bindValue(':mot1', '%'.$expression.'%', PDO::PARAM_STR, 20);
$stmt->bindValue(':mot2', '%'.$expression.'%', PDO::PARAM_STR, 20);
$stmt->execute();
Erreur
Il n'y a pas d'erreur et ça fonctionne.
Avec SQLServer, il faut donc autant de binValue que de paramètre dans la requête.