Question

Salut là je joue avec stmt pour la première fois (regarder convertir mon code sur après avoir utilisé précédemment des fonctions standard mysqli par une classe d'extension.

Cependant, je ne peux pas sembler le faire fonctionner. J'utilise PHP 5.2.11 et MySQL 4.1.22.

J'ai une structure de table comme ceci:

CREATE TABLE IF NOT EXISTS `tags` (
  `tag_id` smallint(3) unsigned NOT NULL auto_increment,
  `title` varchar(32) NOT NULL default '',
  PRIMARY KEY  (`tag_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;

et voici mon code, je l'ai utilisé http://devzone.zend.com/article / 686 et php.net comme références.

$mysqli = new mysqli('***','***','***','***');

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$stmt = $mysqli->prepare("INSERT INTO tags (title) VALUES (?)");

$stmt->bind_param('s', $title);

$title = 'test 123';

$stmt->execute();

$stmt->close();

$mysqli->close();

Il semble assez simple et j'espère qu'il insérerait « test 123 » dans la colonne de titre avec l'incrémentation automatique tag_id. Mais au lieu titre est vide (tag_id n'incremenet comme on peut supposer).

Quelqu'un a des idées où je vais mal?

=============================================== ==

Comme Atli a souligné et testé, il fonctionne sur la version MYSQL 5 et au-dessus. Il est donc probablement un problème avec l'aide d'une ancienne version de SQL bien que la documentation php.net dit que mysqli « vous permet d'accéder aux fonctionnalités fournies par MySQL 4.1 et au-dessus ».

Si quelqu'un peut suggérer une autre raison pour laquelle il ne peut pas travailler ou comment le faire fonctionner dans mon environnement qui grand. Sinon, je suppose que je vais continuer avec ma propre extension de la classe mysqli pour préparer et requêtes propres.

Était-ce utile?

La solution

Je l'ai testé votre code sur mon serveur de test et il fonctionne très bien. (avec PHP 5.3 et MySQL 5.1.37) Il est donc pas le code lui-même, ou la conception de base de données.

Ma première hypothèse serait une incompatibilité avec la version MySQL.
Vous pouvez essayer d'utiliser le mysqli_stmt :: get_warnings fonction pour voir s'il y a des avertissements émis.

S'il est possible, je recommande la mise à niveau MySQL. La version que vous utilisez devient assez ancienne. . - je vais installer 4.1 et tester ce sur (juste pour le fun: P) mais ils ont même pas les téléchargements disponibles plus

Autres conseils

Définir le titre de $ avant de l'utiliser. Vous devez inclure cette ligne

$title = 'test 123';

avant

$stmt->bind_param('s', $title);

code complet:

$mysqli = new mysqli('***','***','***','***');

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$title = 'test 123';

$stmt = $mysqli->prepare("INSERT INTO tags (title) VALUES (?)");

$stmt->bind_param('s', $title);

$stmt->execute();

$stmt->close();

$mysqli->close();

Au lieu de

$stmt->bind_param('s', $title);

essayez ceci:

$stmt->bindParam(1, $title, PDO::PARAM_STR);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top