ODBC préparé des déclarations en PHP
Je suis en train d'utiliser odbc_prepare et odbc_execute en PHP comme suit:
$pstmt=odbc_prepare($odb_con,"select * from configured where param_name='?'");
$res=odbc_execute($pstmt,array('version'));
var_dump($res); //bool(true)
$row = odbc_fetch_array($pstmt);
var_dump($row); //bool(false)
La première var_dump retourne true si l'exécution réussit, mais il n'y a pas de ligne retournée. Une ligne existe bel et bien avec la param_name = "version". Pourquoi pas de ligne retournée?
Rendre les choses intéressantes, j'ai couru un autre exemple très simple en php à l'aide d'un prêt insérer.
$pstmt=odbc_prepare($odb_con,"insert into tmp1 values(?,'?')");
Cette ligne, par lui-même, d'insérer une ligne dans la base de données!! Certes, cela est tout simplement faux? Les données saisies a été col 1 = blanc, col 2 = ?
Des conseils sur où commencer la fixation de ce serait apprécié, merci.
Edit: C'est en PHP 5.2.8
source d'informationauteur psynnott
Vous devez vous connecter pour publier un commentaire.
Essayez de supprimer les guillemets simples dans la chaîne de requête et de les ajouter à la valeur du paramètre lui-même:
Le seul caractère espace au début de la valeur du paramètre est très important: si l'espace n'est pas là, elle traitera de la variable comme un chemin vers un fichier.
De http://www.php.net/manual/en/function.odbc-execute.php:
quand j'ai lu ce paragraphe
Il me semble qu'il n'est pas nécessaire d'ajouter des guillemets simples
'
à une chaîne de caractères, seulement si vous voulez vraiment avoir les guillemets dans le texte de la DBDonc si je ne veux insérer le texte, sans les guillemets simples je voudrais écrire quelque chose comme ça ...
voir cet exemple à partir d'odbc-préparer
http://www.php.net/manual/en/function.odbc-prepare.php
Cela aurait pour résultat la déclaration suivante
Voir que je n'ai pas seulement retiré la qoutes pour la valeur dans le tableau params mais également supprimé les qoutes dans l'instruction SQL.
veuillez donner une rétroaction si c'était à droite
EDIT:
Gah, m'ignorer, de se méprendre php.net
odbc_fetch_array accepte comme paramètre le résultat de odbc_execute, vous semblez être de passage dans la déclaration préparée.
Ce SGBD que vous utilisez? Le fait que le seul insérer préparer déclaration semble être exécutées sur la base de données plutôt que d'être préparé points soit à une mauvaise mise en œuvre de php (peu probable) ou le SGBD ne pas soutenir sql préparée. Si ce dernier est le cas, il est possible que leur façon de soutenir la commande avec la fonctionnalité est juste pour exécuter l'instruction conduisant à des résultats que vous obtenez. Si le SGBD ne soutien préparées et de l'implémentation php gère correctement il y a une sorte de problème avec l'insert être exécutée qui doit également certains enquête.
Avez-vous essayez d'utiliser des guillemets? c'est à dire
Vous ne doit pas contenir de variables entre guillemets dans un communiqué:
devrait être:
Points d'interrogation représentent les emplacements de paramètre, la valeur transmise est censé représenter non échappés, unenclosed de la valeur, être échappées par l'interprète de SQL.