Pregunta

Hola, estoy jugando con STMT por primera vez (buscando convertir mi código después de usar previamente las funciones estándar de MySQLI a través de una clase de extensión.

Sin embargo, parece que no puedo hacer que funcione. Estoy usando PHP 5.2.11 y MySQL 4.1.22.

Tengo una estructura de mesa como así:

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 ;

Y aquí está mi código, he estado usando http://devzone.zend.com/article/686 y php.net como referencias.

$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();

Parece bastante simple y espero que inserte "Prueba 123" en la columna de título con la incrementación automática TAG_ID. Pero en cambio, el título está en blanco (Tag_id hace Incremenet como se supone).

¿Alguien tiene alguna idea de dónde me equivoco?

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

Como Atli señaló y probó, funciona en la versión MySQL de 5 y más. Por lo tanto, probablemente sea un problema con el uso de una versión antigua de SQL, aunque la documentación php.net dice que MySQLI "le permite acceder a la funcionalidad proporcionada por MySQL 4.1 y superior".

Si alguien puede sugerir otra razón por la que puede no funcionar o cómo hacer que funcione en mi entorno que sería genial. Si no, supongo que seguiré con mi propia extensión de la clase MySqli para preparar y limpiar consultas.

¿Fue útil?

Solución

He probado su código en mi servidor de prueba y funciona bien. (Usando PHP 5.3 y MySQL 5.1.37)
Por lo tanto, no es el código en sí, ni el diseño de la base de datos.

Mi primera suposición sería una incompatibilidad con su versión MySQL.
Podrías intentar usar el mysqli_stmt :: get_warnings Funciona para ver si hay advertencias emitidas.

Si es posible, recomendaría actualizar MySQL. La versión que estás usando se está volviendo bastante antigua. - Iba a instalar 4.1 y probar esto en él (Solo por diversión: P) Pero ya ni siquiera tienen las descargas disponibles.

Otros consejos

Defina $ Título antes de usarlo. Deberías incluir esta línea

$title = 'test 123';

antes de

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

Código completo:

$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();

En vez de

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

prueba esto:

$stmt->bindParam(1, $title, PDO::PARAM_STR);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top