私は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"];
}
これは、結果が結果ではない場合に発生します(代わりに「false」)。この行を変更する必要があります
$sql = 'SELECT * FROM $usertable WHERE PartNumber = $partid';
これに:
$sql = "SELECT * FROM $usertable WHERE PartNumber = $partid";
なぜなら「」は「$ variables」を解釈できますが、「」はできないからです。
整数(数値)で正常に動作します。文字列の場合、次のように$ variableを単一引用符で囲む必要があります。
$sql = "SELECT * FROM $usertable WHERE PartNumber = '$partid' ";
単一引用符で作業する必要がある場合、phpは変数を解釈できません。次のように実行する必要があります。
$sql = 'SELECT * FROM '.$usertable.' WHERE string_column = "'.$string.'" AND integer_column = '.$number.';
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
。
変数の代わりに変数テキストを作成しているSQLステートメントを単一引用符で囲んでいます。
$sql = "SELECT *
FROM $usertable
WHERE PartNumber = $partid";
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回チェックする必要があるかもしれません。
$usertable
が有効なテーブルではないか、列PartNumberが含まれていないか、部分が数字ではありません。
ブール値を返す可能性があるため、$ partidをエスケープし、mysql_fetch_assoc()のドキュメントも読み取る必要があります。