15-08-2010, 09:22
|
|
|
חבר מתאריך: 15.07.02
הודעות: 1,027
|
|
פונקציה מתנהגת מוזר...
אהלן, אז ככה יש לי פונקציה ב2 גרסאות, גרסא ראשונה:
קוד PHP:
public function authorizeUser($u, $pw) { $link = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or die('.בעיה בהתחברות לבסיס הנתונים'); $link->query("SET NAMES 'utf8'"); $query = "SELECT email, password FROM sites WHERE email = ? AND password = ? LIMIT 1"; if ($stmt = $link->prepare($query)) { $p = md5($pw); $stmt->bind_param('ss', $u, $p); $stmt->execute(); $stmt->bind_result($u, $pw); if ($stmt->fetch()) { $_SESSION['Uauthorized'] = true; $_SESSION['Uname'] = $u; return true; } else { return false; } $stmt->close(); } $link->close(); } }
גרסא שנייה:
קוד PHP:
public function authorizeAdUser($u, $pw) { $link = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or die('.בעיה בהתחברות לבסיס הנתונים'); $link->query("SET NAMES 'utf8'"); $query = "SELECT username, password FROM ad_users WHERE username = ? AND password = ? LIMIT 1"; if ($stmt = $link->prepare($query)) { $p = md5($pw); $stmt->bind_param('ss', $u, $p); $stmt->execute(); $stmt->bind_result($u, $pw); if ($stmt->fetch()) { $_SESSION['adAuthorized'] = true; $_SESSION['adName'] = $u; return true; } else { return false; } $stmt->close(); } $link->close(); }
מה שמוזר הוא שבגרסא הראשונה הפונקציה עובדת בסדר,
ברגסא השנייה, לא רק שהיא לא מחזירה true אני גם מקבל הודעה כזו:
קוד:
[Sun Aug 15 09:39:37 2010] [error] [client 79.176.9.208] PHP Warning: mysqli_stmt::bind_result() [<a href='function.mysqli-stmt-bind-result'>function.mysqli-stmt-bind-result</a>]: Number of bind variables doesn't match number of fields in prepared statement. in /var/www/vhosts/g1000000.org/httpdocs/core/core.php on line 1506, referer: http://g1000000.org/enterance.php
[Sun Aug 15 09:40:45 2010] [error] [client 79.176.9.208] PHP Notice: Object of class gAdUser to string conversion in /var/www/vhosts/g1000000.org/httpdocs/core/core.php on line 1505, referer: http://g1000000.org/enterance.php
כשאני לא מבין איך בדיוק יש הבדל בכמות משתנים.. ומה הוא בעצם רוצה להגיד בהודעה השניה? לא ברור לי.. השורה שאליה הוא מתחייס היא זו:
רק עוד הערה, הפונקציה בגרסא הראשונה מחזירה true עם שם משתמש וסיסמא נכונים ולא מוציאה הודעות כאלה.
השניה מחזירה false עם שם משתמש וסיסמא נכונים ומוציאה הודעות האלה..
איך הדבר ייתכן? מה אני מפספס?
_____________________________________
ציטוט:
Different people use different tools, but its mostly morons who pretend that the problems with PHP actually matter.
|
|