2016-09-18 24 views
-2

私はMySQLiのテーブルからphpで準備されたステートメントを使ってフィールドを取得しようとしていますが、空の結果が得られます。フィールドがテーブルの中にあることは分かっていますが、何も引っ張られません。ここに私のコードです:PHPでMySQLiの準備されたステートメントが動作しない

if (!($stmt = $conn->prepare("SELECT password from members WHERE username = \"Bill\""))) 
{ 
    echo "Prepare failed: (" . $conn->errno . ") " . $conn->error; 
} 

if (!$stmt->execute()) { 
    echo "Execute failed: (" . $conn->errno . ") " . $conn->error; 
} 


if (!$stmt->bind_result($result)){ 
    echo "Bind failed"; 
} 

$sql_searched_password = $result; 
    echo $sql_searched_password." 
+0

より良い例かもしれませんか? –

+1

'bind_result'の後に' fetch'を呼び出す必要があります。任意のmysqliチュートリアルまたは公式ドキュメントを参照してください。 –

+0

私は何のエラーもありません。 echoコマンドは単に何も出力しません。 –

答えて

1

$stmt->bind_result($result)を呼び出す

結果は$result変数にバインドされることを意味します。

参照 - will be bindedbind_resultは、データベースから行をフェッチしません。 fetchで行わフェッチ行:

$stmt->bind_result($result); 

while ($stmt->fetch()) { 
    $sql_searched_password = $result; 
} 

echo $sql_searched_password; 

/* close statement */ 
$stmt->close(); 

manualを参照してください。

2

->fetch()は、結果セットからデータをバインドされた変数にプルするコマンドであることを忘れています。

ます。また、クエリが実際にリテラル

if (!($stmt = $conn->prepare("SELECT password from members WHERE username = 'Bill'"))) 
{ 
    echo "Prepare failed: (" . $conn->errno . ") " . $conn->error; 
} 

if (!$stmt->execute()) { 
    echo "Execute failed: (" . $conn->errno . ") " . $conn->error; 
} 


if (!$stmt->bind_result($result)){ 
    echo "Bind failed"; 
} 

$stmt->fetch(); 

echo $result; 

二重引用符で囲まれた文字列内の単一引用符を使用することによって、より複雑なを取得するときに、特別にクエリを準備する点である、読みので、デバッグするために、クエリを簡単にすることができます準備の後にパラメータを渡すことができるようにします。準備された文を別のパラメータで複数回呼び出すこともできます。

これは、あなたがどのようなエラーが出るん

if (!($stmt = $conn->prepare("SELECT password from members WHERE username = ?"))) 
{ 
    echo "Prepare failed: (" . $conn->errno . ") " . $conn->error; 
} 

if (!$stmt->bind_param("s", 'Bill')) { 
    echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error; 
} 

if (!$stmt->execute()) { 
    echo "Execute failed: (" . $conn->errno . ") " . $conn->error; 
} 

if (!$stmt->bind_result($result)){ 
    echo "Bind failed"; 
} 

$stmt->fetch(); 
echo $result; 

// bind a new value to the existing prepared query 
if (!$stmt->bind_param("s", 'William')) { 
    echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error; 
} 

if (!$stmt->execute()) { 
    echo "Execute failed: (" . $conn->errno . ") " . $conn->error; 
} 

if (!$stmt->bind_result($result)){ 
    echo "Bind failed"; 
} 

$stmt->fetch(); 

echo $result; 
関連する問題