Stmt ve mysqli'nin ile veritabanı içine yerleştirilmesi

2 Cevap php

Merhaba ben ilk defa stmt oynuyorum (önceden bir uzantısı sınıfı aracılığıyla standart mysqli fonksiyonlarını kullandıktan sonra üzerinde benim kod dönüştürme bakıyor.

Ancak bu çalışma almak için görünmüyor olabilir. Ben PHP 5.2.11 ve mysql 4.1.22 kullanıyorum.

Ben şöyle bir tablo yapısı var:

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 ;

ve burada benim kod, ben http://devzone.zend.com/article/686 ve referans olarak php.net kullanarak oldum oluyor.

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

Yeterince basit görünüyor ve ben tag_id otomatik artmasını title sütuna "testi 123" eklemek olacağını umut ediyorum. Ama bunun yerine başlık (bir kabul gibi tag_id incremenet yok) boştur.

Herkes yanlış gidiyorum herhangi bir fikirleri var mı?

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

Atli işaret ve test gibi, bu, 5 ve üzeri MySQL sürümü üzerinde çalışıyor. Php.net belgeleri mysqli "MySQL 4.1 ve üstü tarafından sağlanan işlevselliği erişim sağlar" diyor Yani rağmen muhtemelen sql eski bir sürümünü kullanarak bir sorun var.

O benim bir ortamda bu olur büyük çalışma almak için nasıl çalışıyor ya olabilir neden kimse başka bir sebep önerebilir. Eğer değilse benim hazırlamak için mysqli sınıfının kendi uzantısı ve temiz sorgu ile devam edeceğiz herhalde.

2 Cevap

I've tested your code on my test server and it works fine. (Using PHP 5.3 and MySQL 5.1.37)
So it is not the code itself, or the database design.

My first guess would be some incompatibility with your MySQL version.
You could try using the mysqli_stmt::get_warnings function to see if there are any warnings issued.

Eğer mümkün ise, ben yükseltme MySQL öneriyoruz. Kullandığınız sürümü oldukça eski oluyor. - Ben 4.1 yüklemek ve (just for fun :P) üzerine bu test etmek için gidiyordu ama onlar bile artık indirme kullanılabilir yok.

Yerine

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

Bu deneyin:

$stmt->bindParam(1, $title, PDO::PARAM_STR);