2016-08-16 5 views
0

Prepared SQL文を使用してW3Schoolsチュートリアルに従っています。データベースにデータを挿入しようとすると、$ firstname = "Nathan"と$ lastname = "Kent"は未使用のローカル変数です。また、エラーを返さないため、接続は正常です。データベースをチェックすると、新しいエントリはありません。Prepared SQL文INSERT

function setData(){ 
    global $servername; 
    global $username; 
    global $password; 
    global $dbname; 

    $conn = new mysqli($servername, $username, $password, $dbname); 

// Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } else{ 
     echo "Connection Successful" . "<br>"; 
    } 
    $stmt = $conn->prepare("INSERT INTO test(firstname, surname) VALUES  (?,?)"); 
    $stmt->bind_param("ss", $firstname, $surname); 

    $firstname = "James"; 
    $lastname = "Williams"; 
    $stmt->execute(); 

    echo "New Records Created"; 

    $stmt->close(); 
    $conn->close(); 

} 
+0

'$ firstname'と' $ surname'はどこに定義されていますか? – Script47

+2

私は肯定的ではありませんが、バインディングする前に設定する必要があると確信しています。 '$ ** sur ** name'と' $ ** last ** name'の問題があります。 – Uueerdo

+0

@Uueerdo私はそれを修正しました、それは最後の変更でした) – Nathan

答えて

0

MYSQLIを使用すると、実際にはあなたが叫ぶと仮定するのではなく、エラーを探す必要があります。

function setData(){ 
    global $servername; 
    global $username; 
    global $password; 
    global $dbname; 

    $conn = new mysqli($servername, $username, $password, $dbname); 

    // Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } else{ 
     echo "Connection Successful" . "<br>"; 
    } 
    $stmt = $conn->prepare("INSERT INTO test(firstname, surname) VALUES (?,?)"); 

    // add error check 
    if ($stmt === false) { 
     echo $conn->error; 
     exit; 
    } 

    // Its not necessary to load the variables before the `bind_param` 
    // but as you dont actually have these variables yet you do 
    $firstname = "James"; 
    $lastname = "Williams"; 

    $stmt->bind_param("ss", $firstname, $surname); 

    $status = $stmt->execute(); 

    // add error check 
    if ($status === false) { 
     echo $conn->error; 
     exit; 
    } 


    echo "New Records Created"; 

    $stmt->close(); 
    $conn->close(); 

} 
あなたは、メインライン・コード内のデータベースに接続し、機能への接続のparamだけでなく、データのパラメータを渡すことによって、同様ビットを、これをクリーンアップすることができ

function setData($conn, $firstname, $lastname){ 

    $stmt = $conn->prepare("INSERT INTO test(firstname, surname) VALUES (?,?)"); 

    // add error check 
    if ($stmt === false) { 
     echo $conn->error; 
     exit; 
    } 

    $stmt->bind_param("ss", $firstname, $surname); 

    $status = $stmt->execute(); 

    // add error check 
    if ($status === false) { 
     echo $conn->error; 
     exit; 
    } 

    return "New Records Created"; 

    $stmt->close(); 
    $conn->close(); 

} 


$servername = '127.0.0.1'; 
$username = 'root'; 
$password = 'veryStRongPassPhrASe'; 
$dbname  = 'mydatabase'; 

$conn = new mysqli($servername, $username, $password, $dbname); 

// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} else{ 
    echo "Connection Successful" . "<br>"; 
} 


$msg = setData($conn, 'Fred', 'Bloggs'); 
echo $msg; 
+0

'echo $ conn->エラーの代わりに。 exit; '' exit($ conn-> error); ''なぜ? – Script47

+0

@ Script47あなたはジャガイモをジャガイモといいます。実際それは書面では機能しません。ハッハッハ – RiggsFolly

+0

驚くばかり!将来私はそれを使用しますが、関数内でグローバル変数を使用したので、他の値は同じスコープになければなりません。グローバル変数は、dbconfigの詳細を取得する正しい方法ですか?私は別の.phpファイルにdbconfigの詳細を入れ、それを含めます。 – Nathan

0

あなたが定義されていません。 $surnameの値:

$stmt->bind_param("ss", $firstname, $surname); 

$firstname = "James"; 
$lastname = "Williams"; 
$stmt->execute(); 

変更$lastname$surname