Domanda

Ciao sto giocando con stmt per la prima volta (guardando convertire il mio codice dopo che in precedenza utilizzando le funzioni standard di mysqli attraverso una classe di estensione.

Tuttavia, non riesco a farlo funzionare. Sto utilizzando PHP 5.2.11 e MySQL 4.1.22.

Ho una struttura di tabella in questo modo:

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 ;

ed ecco il mio codice, ho usato http://devzone.zend.com/article / 686 e php.net come riferimenti.

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

Sembra abbastanza semplice e vorrei sperare che sarebbe inserire "test 123" nella colonna del titolo con il di incremento automatico tag_id. Ma invece il titolo è vuoto (non tag_id incremenet come si potrebbe supporre).

Qualcuno ha qualche idea dove sto andando male?

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

Come Atli sottolineato e testato, funziona su versione di MySQL 5 e superiori. Quindi è probabilmente un problema con l'utilizzo di una vecchia versione di SQL, anche se la documentazione php.net dice che mysqli "permette di accedere alla funzionalità fornita da MySQL 4.1 o superiore".

Se qualcuno può suggerire un altro motivo per cui potrebbe non funzionare o il modo di farlo funzionare nel mio ambiente che sarebbe grande. Se non Suppongo che terrò con la mia propria estensione della classe mysqli per preparare e query puliti.

È stato utile?

Soluzione

Ho provato il codice sul mio server di prova e funziona benissimo. (Utilizzo di PHP 5.3 e MySQL 5.1.37)
Quindi non è il codice stesso, o la struttura del database.

La mia prima risposta sarebbe certa incompatibilità con la versione di MySQL.
Si potrebbe provare a utilizzare il mysqli_stmt :: get_warnings funzione per vedere se ci sono eventuali avvisi emessi.

Se è possibile, mi sento di raccomandare l'aggiornamento di MySQL. La versione in uso sia sempre piuttosto antica. . - Stavo per installare 4.1 e testare questa su di esso (solo per divertimento: P) , ma non hanno nemmeno i download disponibili più

Altri suggerimenti

Definisci $ titolo prima di utilizzarlo. È necessario includere questa riga

$title = 'test 123';

prima

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

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

Al posto di

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

provare questo:

$stmt->bindParam(1, $title, PDO::PARAM_STR);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top