2

MySQLIコードを使用してレジスタを作成する際に問題が発生しました。テーブル/接続変数が一致しており、クエリを介して渡される正しい変数に期待される文字列が入力されます。を実行するとき、queryまたはprepare & execute任意のタイプのクエリを実行すると、次のように返されます。

致命的なエラー:40行目の/var/www/New/API/FormValidations.phpにある非オブジェクトのメンバー関数query()を呼び出す

私のコードは次のとおりです。

$Query = $STD->prepare("SELECT * FROM Users WHERE Username='$Username'");
$Query->execute();
$Number = $Query->num_rows;
if ($Number !== 0)
{
    echo "Username Already In Use";
}
else
{
$Insert_User = $STD->prepare("INSERT INTO Users ('Username', 'Password') VALUES ('$Username', '$Password)");
$Insert_User->execute();
echo "Account Created!";
}

これが私の接続スクリプトです:

$STD = new mysqli('localhost', 'root', 'xxxxx', 'SLMS');
$AccessCon = new mysqli('localhost', 'root', 'xxxxx', 'DBAccess');

if ($AccessCon->connect_error) {
    die("Access Has Been Revoked. Please Contact Administration");
}

if ($STD->connect_error) {
    die("Standard Access Has Been Revoked. Please Contact Administration"); 
}

およびユーザー用のSQLテーブル:

CREATE TABLE IF NOT EXISTS `Users` (
  `ID` int(255) NOT NULL AUTO_INCREMENT,
  `Username` varchar(255) NOT NULL,
  `Password` text NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

すべてのクエリコードをコメントアウトして実行してみました

$Query = $STD->query("SHOW TABLES"); $Results = $STD->fetch_array(MYSQLI_ASSOC);

これでも、$Query変数でエラーが返されました。

また、データベースにすでに存在するものを検索するようにコードを変更しようとしました。

$Query = $STD->prepare("SELECT * FROM Users WHERE Username='Test'");

そして私の次のように同封しようとしました$Username

$Query = $STD->prepare("SELECT * FROM Users WHERE Username='{$Username}'");

これは成功しませんでした。誰かがこの状況に光を当てることができるかどうか疑問に思いましたか?

編集:

スクリプト全体をコメントアウトして実行するだけです。

$Query = $STD->query("SHOW TABLES");
$test = $Query->fetch_array(MYSQLI_ASSOC);
print_r($test);

結果を返します。

アップデート:

コードを次のように変更しました。

$Query = $STD->prepare("SELECT * FROM Users WHERE Username=?");
                $Query->bind_param("s", $Username);
                $Query->execute();

最終更新:

致命的なエラー:45行目の/var/www/New/Register.phpにある非オブジェクトのメンバー関数bind_param()を呼び出す

これは新しいエラーです。

問題のある行:

            $Insert_User = $STD->prepare("INSERT INTO Users ('Username', 'Password') VALUES (?, ?)");
                $Insert_User->bind_param("ss", $Username, $Password);
            $Insert_User->execute();
4

1 に答える 1

1

準備を使用するときは、値を保持する変数をバインドする必要があります。

例:

 $city = "Amersfoort";

/* create a prepared statement */
if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {

    /* bind parameters for markers */
    $stmt->bind_param("s", $city);

    /* execute query */
    $stmt->execute();

    /* bind result variables */
    $stmt->bind_result($district);

    /* fetch value */
    $stmt->fetch();

    printf("%s is in district %s\n", $city, $district);

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

ここに準備されたステートメントへのリンクがあります

アップデート

これ:

$Query = $STD->prepare("SELECT * FROM Users WHERE Username=s");

する必要があります:

$Query = $STD->prepare("SELECT * FROM Users WHERE Username=?");

これ:

$Insert_User = $STD->prepare("INSERT INTO Users ('Username', 'Password') VALUES ('U', 'P)");

する必要があります:

$Insert_User = $STD->prepare("INSERT INTO Users ('Username', 'Password') VALUES (?, ?)");

これ :

$Insert_User->bind_param('U', $Username);
$Insert_User->bind_param('P', $Password);

これである必要があります:

$Insert_User->bind_param('ss', $Username,$Password);
于 2013-01-11T01:14:16.847 に答える