2011-08-10 29 views
1

みんな!
connection.inc.phpはフォルダ「が含まれる」であり:PHP MySQL接続エラー

<?php 
function dbConnect($usertype, $connectionType = 'mysqli') { 
$host = 'localhost'; 
$db = 'testdb'; 
if ($usertype == 'read') { 
    $user = 'readuser'; 
    $pwd = 'testpass'; 
} elseif ($usertype == 'write') { 
    $user = 'writeuser'; 
    $pwd = 'testpass'; 
} else { 
    exit('Unrecognized connection type'); 
} 

if ($connectionType == 'mysqli') { 
    return new mysqli($host, $user, $pwd, $db) or die('Cannot open database'); 
} else { 
    try { 
    return new PDO("mysql:host=$host;dbname=$db", $user, $pwd);  
} catch(PDOException $e) { 
    echo 'Cannot connect to database'; 
    exit; 
} // end of try block 

} // end of $connectionType if 

} // end of function 

私は、このテストのためのLinuxを使用して、最新のXAMPP 1.7.4
しかし、私は、次のコードを使用するときに物事が悪化し:(非上(メンバ関数クエリに呼び出し):
致命的なエラーは:私はすでに私のDB、および2人のユーザーreaduser 'と「writeuser」)

<?php 
// I use mysqli extension to connect my DB 
require_once(includes/connection.inc.php); 
// connect to DB 
$conn = dbConnect('read'); 
// I need to get some picture infomations from images table 
$sql = 'SELECT * FROM images'; 

$result = $conn->query($sql) or die(mysqli_error()); 
// find out how many records were retrieved 
$numRows = $result->num_rows; 
echo "We have $numRows pictures in DB"; 
?> 

そして、私は私のブラウザでそれを読み込むを作成しました-options /opt/lampp/htdocs/mysqli.php 9行目のオブジェクト
は、だから私は、$ connは今オブジェクトではありません推測するが、私はこのコードを書くとき、それは動作します:

<?php 
$host = 'localhost'; 
$user = 'readuser'; 
$pass = 'testpass'; 
$db = 'testdb'; 
$sql = 'SELECT * FROM images'; 

$conn = new mysqli($host, $user, $pass, $db); 
$result = $conn->query($sql) or die(mysqli_error()); 
$numRows = $result->num_rows; 
echo "We have $numRows pictures in DB"; 
?> 

をそして、それは出力:私たちは、私ができる、本当に奇妙なことだDB
で8枚の写真を持って」それを理解する...ありがとう!

+1

'するrequire_once(/ connection.inc.phpを含ん);' 'である必要がありますrequire_onceは '/ connection.inc.php' を含む;' – Asaph

+0

申し訳ありませんが、私はそれが間違って入力されたしかし、私の本当のPHPスクリプトにするrequire_onceです! ( 'includes/connection.inc.php'); – Alex

答えて

1

新しいmysqli()結果を変数として保存してから、代わりにその変数を返してください。その論理は理にかなっていませんが、私は以前のような問題を抱えていました。

$a = new mysqli($host, $user, $pwd, $db) or die ('Cannot open database'); 
return $a; 
+0

ありがとう!男、それは良い作品! – Alex

+2

実際には完璧な意味合いがあります。 'または'はブール値が返され、 '= 'はブール値が評価される前に代入されます。 'return $ a = $ bまたは$ c'は' return $ a ||を意味します。 $ c '' $ a = $ b or $ c; 'は単にtrueと評価されますが、同時に発生する割り当てがあります。 – cwallenpoole