Frage

Hallo, ich spiele zum ersten Mal mit STMT (suchte meinen Code um, nachdem ich zuvor Standard -MySQLI -Funktionen über eine Erweiterungsklasse verwendet habe.

Ich kann es jedoch nicht zum Laufen bringen. Ich verwende PHP 5.2.11 und MySQL 4.1.22.

Ich habe eine Tischstruktur wie so:

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 ;

Und hier ist mein Code, ich habe verwendet http://devzone.zend.com/article/686 und php.net als Referenzen.

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

Es erscheint einfach genug und ich würde hoffen, dass es "Test 123" in die Title -Spalte mit der Auto -Inkrementierung tag_id einfügt. Stattdessen ist der Titel leer (tag_id macht inkremet, wie man annehmen würde).

Hat jemand irgendwelche Ideen, bei denen ich falsch gehe?

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

Wie Atli betonte und getestet hat, funktioniert es auf der MySQL -Version von 5 und höher. Es ist also wahrscheinlich ein Problem bei der Verwendung einer alten Version von SQL, obwohl die Php.NET -Dokumentation besagt, dass MySQLI "es Ihnen ermöglicht, auf die von MySQL 4.1 und höher bereitgestellten Funktionen zugreifen".

Wenn jemand einen anderen Grund vorschlagen kann, warum es möglicherweise nicht funktioniert oder wie er in meiner Umgebung zum Laufen gebracht werden kann, würde dies großartig. Wenn nicht, werde ich mit meiner eigenen Erweiterung der MySQLI -Klasse behalten, um Fragen vorzubereiten und zu reinigen.

War es hilfreich?

Lösung

Ich habe Ihren Code auf meinem Testserver getestet und er funktioniert gut. (Mit PHP 5.3 und MySQL 5.1.37)
Es ist also nicht der Code selbst oder das Datenbankdesign.

Meine erste Vermutung wäre eine Inkompatibilität mit Ihrer MySQL -Version.
Sie könnten versuchen, die zu verwenden MySQLI_STMT :: get_warnings Funktion, um zu sehen, ob Warnungen ausgestellt werden.

Wenn es überhaupt möglich ist, würde ich empfehlen, MySQL zu verbessern. Die Version, die Sie verwenden, wird ziemlich alt. - Ich wollte 4.1 installieren und dies darauf testen (Nur zum Spaß: p) Aber sie haben nicht einmal mehr die Downloads zur Verfügung.

Andere Tipps

Definieren Sie $ title, bevor Sie ihn verwenden. Sie sollten diese Zeile einschließen

$title = 'test 123';

Vor

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

Voller Code:

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

Anstatt von

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

Versuche dies:

$stmt->bindParam(1, $title, PDO::PARAM_STR);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top