2012-09-01 140 views
0

我遇到了mysqli和准备好的语句问题。我刚开始学习的mysqli一个小时,我有麻烦不理解为什么我得到这两个错误:未声明的变量mysqli

Notice: Undefined variable: mysqli in /opt/lampp/htdocs/lr/testingi.php on line 17 

Fatal error: Call to a member function prepare() on a non-object in /opt/lampp/htdocs 

/lr/testingi.php on line 17 

我有一个包含数据库连接文件。这里是。

$mysqli = new mysqli("localhost", "user", "password", "db"); 

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

这是重现错误的测试文件。

session_start(); 

require_once 'core/database/connect.php'; 

function user_id_from_username ($username) { 

if ($stmt = $mysqli->prepare("SELECT `user_id` FROM `users` WHERE `username` = ?")) 

$stmt->bind_param('s', $username); 
$stmt->execute(); 
$stmt->bind_result($user_id); 
echo $user_id; 
$stmt->close(); 
} 

$username = 'Jason';   

user_id_from_username ($username); 

回答

4

你看上去不及格$mysqliuser_id_from_username功能。

2个快速选项:

1.全球

function user_id_from_username ($username) { 
global $mysqli; 
if ($stmt = $mysqli->prepare("SELECT `user_id` FROM `users` WHERE `username` = ?")) 

$stmt->bind_param('s', $username); 
$stmt->execute(); 
$stmt->bind_result($user_id); 
echo $user_id; 
$stmt->close(); 
} 

2.第二个参数

function user_id_from_username ($mysqli, $username) {//..} 

user_id_from_username($mysqli, $username); 
+0

我听说做一个变量全球是危险的?第二种选择会更好吗? – jason328

+2

我肯定会为参数投票!一个OO选项可以是一个带有'$ mysqli'的类作为实例参数,这个参数甚至可以更好的IMO,w/e浮起你的船,就像他们说的那样。 – quickshiftin