SQLSTATE[22P02] syntaxe en entrée invalide pour le type booléen : « »
Bonjour,
Dans le cadre d'un requête préparée pour postgreSQL, je n'arrive pas à éviter cette erreur, même en envoyant une valeur NULL et PDO::PARAM_NULL lors du bindValue...
D'après mes tests, le NULL passe pour integer mais pas pour boolean, et je ne vois pas de solution.
Voici la fonction en question qui insert une ligne d'un fichier CSV dans une table d'importation créée automatiquement (et dont le type PDO::PARAM_BOOL, INT, STR, détecté par une première lecture des données, est stocké dans $columns_type_int sous forme numérique) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| private function insert_line($statement, $line, $columns_type_int) {
// normalisation des données de la ligne
foreach ($line as $key => &$value) {
if (ltrim($value) === '')
$value = NULL;
else switch ($columns_type_int[$key]) {
case PDO::PARAM_INT :
$value = (int)$value;
break;
case PDO::PARAM_BOOL :
switch (strtoupper($value)) {
// valeurs interprétées comme TRUE
case '1': case 'TRUE';
case 'YES': case 'OUI': case 'Y' : case 'O' :
case 'POS' :
case 'H' : case 'HOMME' :
$value = TRUE; break;
// valeurs interprétées comme FALSE
case '0': case 'FALSE';
case 'NO': case 'NON': case 'N' : case 'NEG' :
case 'F' :
case 'FEMME' :
$value = FALSE; break;
// valeurs interprétées comme NULL
default :
$value = NULL; break;
}
break;
}
} unset ($key,$value);
// Bind et exécution de la requete préparée
foreach ($line as $key => $value) {
$param_type = is_null($value) ? PDO::PARAM_NULL : $columns_type_int[$key];
$statement->bindValue($key+1, $value, $param_type);
} unset ($key,$value);
$statement->execute($line);
} |
Pour mieux visualiser les choses, voici le var_dump() d'un contenu de $line une fois normalisée (ce qui est mouliné au moment du bindValue() ) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| array (size=105)
0 => string 'ABC' (length=3)
1 => int 12345
2 => null
3 => int 19
4 => null
5 => boolean true
6 => string '14/11/2007 00:00:00' (length=19)
7 => string 'blabla' (length=31)
8 => boolean true
9 => int 10410
10 => string 'blabla' (length=14)
11 => boolean false
12 => boolean false
13 => boolean false
14 => boolean true
15 => boolean false
16 => boolean false
17 => boolean false
18 => boolean false
19 => boolean false
20 => boolean false
21 => boolean false
22 => boolean false
23 => boolean false
24 => null
25 => boolean true
26 => string '21/11/2007 00:00:00' (length=19)
27 => boolean true
28 => boolean true
29 => boolean true
30 => boolean true
31 => boolean false
32 => boolean true
33 => string 'NEG' (length=3)
34 => null
35 => boolean false
36 => null
37 => boolean false
38 => null
39 => boolean false
40 => null
41 => boolean false
42 => null
43 => boolean false
44 => string 'NEG' (length=3)
45 => string '21/11/2007 00:00:00' (length=19)
46 => boolean true
47 => boolean true
48 => boolean true
49 => boolean false
50 => boolean true
51 => boolean false
52 => boolean true
53 => boolean false
54 => boolean false
55 => boolean true
56 => boolean false
57 => boolean true
58 => null
59 => boolean false
60 => boolean false
61 => null
62 => boolean false
63 => boolean true
64 => boolean false
65 => null
66 => boolean false
67 => null
68 => boolean false
69 => null
70 => boolean false
71 => boolean false
72 => null
73 => null
74 => boolean false
75 => null
76 => boolean false
77 => boolean false
78 => boolean false
79 => boolean false
80 => boolean false
81 => null
82 => null
83 => null
84 => null
85 => boolean false
86 => boolean false
87 => null
88 => null
89 => int 441
90 => boolean true
91 => boolean false
92 => boolean false
93 => null
94 => null
95 => null
96 => null
97 => null
98 => null
99 => boolean false
100 => null
101 => boolean false
102 => null
103 => boolean false
104 => boolean false |