2

ログインスクリプトのオブジェクト指向とWebサイトのチェックに最善を尽くしています。そのため、「attempt_login」という名前の関数を作成しました。この関数は、含まれている外部phpファイルによって提供される「mysqli_connect」関数を介したデータベース接続を使用し、$link変数を返します。

しかし、私の「attempt_login」で「mysqli_stmt_prepare」関数に到達すると。常にfalseを返すため、ifステートメントは実行されません。

mysql_connect.php

require_once '../conf.php';

$link = mysqli_connect($mysql_server,$mysql_user,$mysql_pass,$mysql_db);

if(mysqli_connect_error())
{
    //Fail
    echo mysqli_connect_error();

}else{
//Success

}

return $link;

そして、失敗する「attempt_login」からのコード:

    $link = require_once 'functions/mysql/mysql_connect.php';

print_r($link);

$stmt = mysqli_stmt_init($link);

    echo mysqli_stmt_error($stmt);
    echo mysqli_error();

     //This if statement always fails.
if(mysqli_stmt_prepare($stmt,"SELECT member_salt FROM members WHERE username=?" ) )
{

    mysqli_stmt_bind_param($stmt,'s',$login_details['username']);

    mysqli_stmt_execute($stmt);

    $member_salt = NULL;

    mysqli_stmt_bind_result($stmt,$member_salt);

    mysqli_stmt_close($stmt);

}

そして、関数の呼び出しは非常に簡単です。

attempt_login($login_details);

私はこれを行うために多くの方法を試しましたが、関数内にない場合にのみ機能するようです。これは、関数にそれを入れようとする私の目的を打ち破ります。エラー出力をifステートメントの後に移動すると、次のように出力されます。

データベースが選択されていません

リンクに明確に設定されているのに。print_r($ link);も実行できます。そしてそれはmysqlサーバーのための適切なデータを出力します。

また、手続き型およびオブジェクト指向のmysqliスタイルでも同じ問題があり、「mysqli_prepare」でも失敗します。

私はサイトでmysqlを動作させていますが、関数内で何かを実行しようとすると失敗します。

答えを探すために数時間検索しましたが、何も見つかりませんでした。あなたからの便りを楽しみにしています!よろしくお願いします。

〜トラビス

4

2 に答える 2

1

データベースを選択していないと思います。

$mysql_dbに設定されていないか../conf.php、タイプミスがあるか、 に$mysql_db表示されていませんmysql_connect.php

于 2012-12-30T22:24:04.270 に答える
0

関数に渡していないようです。スコープ$stmtでこれを読むことをお勧めします。

于 2012-12-30T21:53:39.353 に答える