0

現在、UserAccount テーブルに登録情報を入力するための登録スクリプトを作成しようとしています。以下は私の接続です:

<?php
//database preparation
$usr = "username";
$pwd = "password"; //put your php password
$host = "computing";
$db = $usr;
$conn = mysqli_connect($host, $usr, $pwd, $db);
if (!$conn){
echo "<p>server connection error:
mysqli_connect_error()</p>";
}
$_SESSION['conn'] = $conn; //database connection status 
transfer;
?>

そして、これが私が苦労している登録です。

<?php
include "conn.php";

$email_address = $_POST['email_address'];
$password = md5($_POST['password']);
$f_name = $_POST['f_name'];
$s_name = $_POST['s_name'];

$insert = 'INSERT INTO UserAccount(email_address, password, f_name, s_name) 
VALUES("'.$email_address.'","'.$password.'","'.$f_name.'","'.$l_name.'")';

mysql_query($insert);


?>

情報を入力すると空白のページが表示され、テーブルにデータが入力されません。なぜでしょうか?

4

4 に答える 4

3

タイプミスがあります

mysql_query($insert);する必要がありますmysqli_query($insert);

mysqli 接続に対して mysql クエリを作成することはできません。

于 2013-03-13T16:07:35.880 に答える
1

クエリが実行されているかどうかを確認する必要がありますか? クエリが返すエラーは何ですか? 試す

mysqli_query($conn,$insert) or die(mysqli_error($conn));

これにより、データがない理由がわかります。MYSQLI または PDO に移行してよかった

編集:

$l_nameまた、以前に宣言されていない変数を使用しています。クエリでは、$s_name. ほとんどの場合、テーブルは l_name の空白値を受け入れないように設定されており、それが失敗する場所です

于 2013-03-13T16:05:32.697 に答える
0

このように mysql_ 関数を使用しないでください! 真剣に!

  • 未処理のデータをクエリで直接使用すると、 SQL インジェクションのリスクがあります
    • 誰かが悪意のあるリクエストを作成して、データを公開または破損する可能性があります
  • mysql_* 関数は PHP 5.5 で非推奨になりました!
    • それらはサポートされなくなりました。

解決:

  • 準備済みステートメントを使用する
  • PDO を使用する
  • またはアプリケーション全体で一貫してmysqliを使用します(他の人が指摘したように)

これらすべての中で、PDO の方法をお勧めします。

try {
    //open connection, this is different than in the old functions
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

    //***running query
    //**step1: create statement
    $stmt = $dbh->prepare('INSERT INTO UserAccount(email_address, password, f_name, s_name) 
    VALUES( :email, :password,:f_name,:l_name)'); //notice parameters prefixed with ':'

    //**step2: bind values (be sure to also check out the bindParameter() function too!)
    $stmt->bindValue(':email', $email_address);
    $stmt->bindValue(':password', $password);
    $stmt->bindValue(':f_name', $f_name);
    $stmt->bindValue(':l_name', $l_name);

    //**step3: exexcute statement
    $stmt->execute();

    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
于 2013-03-13T16:21:15.443 に答える
0

一重引用符と二重引用符を変更して、次のことを試してください。

$insert = "INSERT INTO UserAccount(email_address, password, f_name, s_name) 
VALUES('".$email_address."','".$password."','".$f_name."','".$l_name."')";

これは良い習慣です!ページは空白になりますが、少なくともテーブルにエントリを取得する必要があります。

また、データベース名$db$usr? これは正しいです?

$db = $usr;

これは次のようなものではないでしょうか

$db = "databaseName";

最終的な考え:

transfer;おかしなキーワード変数があります。PHP エラー報告/処理の設定により、エラーが発生する可能性がありますが、表示/報告されないため、空白のページが表示されます。echoコード内の特定の場所で使用して、停止する場所を確認します。

$transfer;変数を受け取る必要がありますか?

もう1つの考えは、開始タグの直後に$_SESSION['conn']あるはずだということです。これにより、conn.php が失敗し、.session_start();<?phpINSERT

于 2013-03-13T16:07:53.577 に答える