2016-06-29 1 views
-1

Je trouve que mon insertion PDO MySQL ne fonctionne pasAOP déclaration préparée ne fonctionne pas

Le format de base est:

INSERT INTO `my_table` (id, email_hash, dob, 1, 6, 10) VALUES (?, ?, ?, ?, ?, ?) 

Il est en fait comme ceci:

$InsertQuery = $db->prepare("INSERT INTO `my_table` (id, email_hash, dob, $NumbersString) VALUES (?, ?, ?, $QuestionMarkString)"); 
$InsertQuery->execute(array("$ID, $hashed_email, $dob, $YesNoString")); 

La variable $QuestionMarkString remplit (correctement) le nombre d'espaces réservés de point d'interrogation.

La variable $YesNoString est une chaîne de "1" de longueur appropriée pour agir en tant que marqueurs dans la base de données.

Donc, même quand je vois que la première partie de la requête devient avec succès formée comme:

INSERT INTO `my_table` (id, email_hash, dob, 1, 6, 10) VALUES (?, ?, ?, ?, ?, ?) 

... et le contenu du tableau exécuter avec succès devient:

52, $2y$10$h9yXWUd8edQVMTSwZrX7T.pJ/C1pLDE9b081OtGmG6nbAtXr7lASK, 29062016, 1, 1, 1 

. L'insert ne se produit toujours pas. Je reçois une erreur PHP disant:

PHP Avertissement: PDO :: prepare(): SQLSTATE [42000]: Erreur de syntaxe ou violation d'accès: 1064 Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de '1, 6, 10) VALUES (?,?,?,?,?,?)' à la ligne [etc]

+0

Je ne pense pas que vous ayez besoin des guillemets entourant les valeurs de vos tableaux, n'est-ce pas? – pmahomme

+0

Tout à fait raison - mais quand je corrige cela, même résultat. – imagina

+0

Qu'est-ce que '$ NumbersString'? Le '1 'devrait indiquer que quelque chose est en hausse avec cette valeur. – chris85

Répondre

3

il devrait être:

$InsertQuery->execute(array($ID, $hashed_email, $dob, $YesNoString)); 

en outre, vous ne pouvez pas avoir des colonnes qui only contain digits:

Identifiers peut commencer par un chiffre mais à moins que cité ne peut pas être constitué uniquement de chiffres.

Par conséquent, vous avez besoin d'envelopper vos colonnes dans `contre-apostrophes

+0

Cela n'a pas fonctionné. Même erreur – imagina

+0

@imagina Mis à jour pour fournir plus d'informations sur un autre problème –

+0

Le '$ YesNoString' qu'il ressemble est supposé correspondre aux espaces réservés de' $ QuestionMarkString'. Cela n'arrivera pas avec cette approche. Il y aura 6 espaces réservés et 4 valeurs essayant d'être liés. – chris85

0

ma_table

ne contient pas les colonnes de NumbersString $ (1,6,10)

ou vous avez besoin d'ajouter aux accents graves noms de colonnes ('1', `6`,` 10`)

0

Essayez de mettre (`) contre-apostrophes autour des noms de colonnes numériques:

INSERT INTO `my_table` (id, email_hash, dob, `1`, `6`, `10`) VALUES (?, ?, ?, ?, ?, ?);