Bir satır döndüren değil bağlı params SEÇİN MySQLi

0 Cevap php

Ben bazı veritabanı kullanımı için MySQLi kullanıyorum ve benim kod çalışmıyor neden ben anlamıyorum.

// new connection
$mysqli = new mysqli(
 $config['database']['connect']['host'],
 $config['database']['connect']['username'],
 $config['database']['connect']['password'],
 $config['database']['connect']['name']
);

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

// create prepared statement
if ($stmt = $mysqli->prepare('SELECT password FROM login_users WHERE user_name = ? LIMIT 1')) {
 $stmt->bind_param('s', $username);

 $username = 'gooduser';
 $password = md5('goodpass');

    $stmt->execute();
 $stmt->store_result();

 $_SESSION['messages'][] = 'Num rows: ' . $stmt->num_rows;

    $stmt->bind_result($pass);

 $_SESSION['messages'][] = 'Line 67';
 while ($stmt->fetch()) {
  $_SESSION['messages'][] = 'Line 69';
  if ($password == $pass) {
   $_SESSION['messages'][] = 'Success!';
  }
  else {
   $_SESSION['messages'][] = 'Bad pass';
  }
 }
 $_SESSION['messages'][] = 'Line 77';
 header('Location: ' . $_SESSION['redirect']);

    $stmt->close();
}
$mysqli->close();

"Gooduser" ve "goodpass" bir kullanıcı adı ile, bu doğru satır dönmek gerekir ve oradan çalışması gerekir. $ _SESSION ['Mesajlar'] benim mesajı izci olduğunu unutmayın. Mesajları çıkarılırken, ben bu çıktıyı alıyorum:

Num rows: 0
Line 67
Line 77

It is skipping the while-loop because Num rows is 0. When changing the snippet by the query to not use bound params, it works:

// create prepared statement
if ($stmt = $mysqli->prepare('SELECT password FROM login_users WHERE user_name = "gooduser" LIMIT 1')) {
 //$stmt->bind_param('s', $username);

 //$username = 'gooduser';
 $password = md5('goodpass');

Bu döndürür:

Num rows: 1
Line 67
Line 69
Success!
Line 77

Herkes burada yanlış yapıyorum ne anlatmak ister? Ben basit bir oturum açma komut dosyası yapmak için çalışıyorum.

EDIT: İşte tablo yapısı:

-- Table structure for table `login_users`
--

CREATE TABLE `login_users` (
  `user_id` int(11) NOT NULL auto_increment,
  `user_name` varchar(30) NOT NULL default '',
  `password` varchar(70) NOT NULL default '',
  PRIMARY KEY  (`user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

UPDATE: MySQLi tam özellik seti v4.1 belirten belgelere rağmen, v4.1.3 mevcuttur gibi çeşitli kaynaklar sayesinde görünüyor. Bazı özellikler çalışmayabilir, ancak (örneğin bind_param gibi) diğerleri yok. Zaten benim ana konuştum ve ben son sürüme yükseltmek için arıyorum.

0 Cevap