14

私はPHPとMySQLにかなり慣れていないので、これを理解することはできません。フォーラム全体を検索しましたが、理解できる答えが見つかりませんでした。私はもともとmysql_fetch_assoc()を使用していましたが、数字しか検索できず、文字を検索するときにもエラーが発生しました。私はここで正しい軌道に乗っていることを願っています。よろしくお願いします!

$con = mysqli_connect($hostname,$username,$password) or die ("<script language='javascript'>alert('Unable to connect to database')</script>");
mysqli_select_db($con, $dbname);

if (isset($_GET['part'])){
    $partid = $_GET['part'];
    $sql = 'SELECT * 
        FROM $usertable 
        WHERE PartNumber = $partid';

    $result = mysqli_query($con, $sql);
    $row = mysqli_fetch_assoc($result);

    $partnumber = $partid;
    $nsn = $row["NSN"];
    $description = $row["Description"];
    $quantity = $row["Quantity"];
    $condition = $row["Conditio"];
}
4

5 に答える 5

30

これは、結果が結果ではない場合に発生します(代わりに「false」)。この行を変更する必要があります

$sql = 'SELECT * FROM $usertable WHERE PartNumber = $partid';

これに:

$sql = "SELECT * FROM $usertable WHERE PartNumber = $partid";

「は$変数を解釈できますが、」は解釈できないためです。

整数(数値)で正常に機能します。文字列の場合、$変数を一重引用符で囲む必要があります。

$sql = "SELECT * FROM $usertable WHERE PartNumber = '$partid' ";

一重引用符を使用する必要がある場合、phpは変数を解釈できません。次のようにする必要があります。

 $sql = 'SELECT * FROM '.$usertable.' WHERE string_column = "'.$string.'" AND integer_column = '.$number.';
于 2012-07-05T15:50:54.047 に答える
15
mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given

これは、渡した最初のパラメーターがブール値(trueまたはfalse)であることを意味します。

最初のパラメータはです。$resultこれはfalse、クエリに構文エラーがあるためです。

" ... WHERE PartNumber = $partid';"

SQLクエリにリクエスト変数を直接含めないでください。そうしないと、ユーザーがクエリにSQLを挿入できます。(SQLインジェクションを参照してください。)

変数をエスケープする必要があります。

" ... WHERE PartNumber = '" . mysqli_escape_string($conn,$partid) . "';"

または、を使用しますPrepared Statements

于 2012-07-05T15:51:17.527 に答える
3

変数の代わりに変数テキストを作成しているSQLステートメントを一重引用符で囲んでいます。

$sql = "SELECT * 
    FROM $usertable 
    WHERE PartNumber = $partid";
于 2012-07-05T15:50:35.987 に答える
1

Mysqliはオブジェクト指向プログラミングを利用しています。代わりに、このアプローチを使用してみてください。

function dbCon() {
        if($mysqli = new mysqli('$hostname','$username','$password','$databasename')) return $mysqli; else return false;
}

if(!dbCon())
exit("<script language='javascript'>alert('Unable to connect to database')</script>");
else $con=dbCon();

if (isset($_GET['part'])){
    $partid = $_GET['part'];
    $sql = "SELECT * 
        FROM $usertable 
        WHERE PartNumber = $partid";

    $result=$con->query($sql_query);
    $row = $result->fetch_assoc();

    $partnumber = $partid;
    $nsn = $row["NSN"];
    $description = $row["Description"];
    $quantity = $row["Quantity"];
    $condition = $row["Conditio"];
}

ご不明な点がございましたら、このコードをテストできなかったため、3回チェックする必要があるかもしれません。

于 2012-07-05T15:56:49.363 に答える
0

$usertableが有効なテーブルでない場合、列PartNumberが含まれていない場合、またはパーツが数値でない場合、コードで何が起こりますか。

ブール値を返す可能性があるため、$ partidをエスケープし、mysql_fetch_assoc()のドキュメントも読む必要があります。

于 2012-07-05T15:51:40.280 に答える