mysql固有の構文は使用しないでください。これは時代遅れであり、特にsqliteまたはpostgresqlを使用することにした場合は、後で実際の問題が発生する可能性があります。
PDO接続を使用すると、次のように初期化できます。
// Usage: $db = connectToDatabase($dbHost, $dbName, $dbUsername, $dbPassword);
// Pre: $dbHost is the database hostname,
// $dbName is the name of the database itself,
// $dbUsername is the username to access the database,
// $dbPassword is the password for the user of the database.
// Post: $db is an PDO connection to the database, based on the input parameters.
function connectToDatabase($dbHost, $dbName, $dbUsername, $dbPassword)
{
try
{
return new PDO("mysql:host=$dbHost;dbname=$dbName;charset=UTF-8", $dbUsername, $dbPassword);
}
catch(PDOException $PDOexception)
{
exit("<p>An error ocurred: Can't connect to database. </p><p>More preciesly: ". $PDOexception->getMessage(). "</p>");
}
}
そして、変数を初期化します。
$host = 'localhost';
$user = 'root';
$dataBaseName = 'databaseName';
$pass = '';
これで、次の方法でデータベースにアクセスできます。
$db = connectToDatabase($host , $databaseName, $user, $pass); // You can make it be a global variable if you want to access it from somewhere else.
次に、実際に変数があることを確認する必要があります。
$search = isset($_GET['search']) ? $_GET['search'] : false;
したがって、何かが何らかの理由で失敗した場合は、実際にデータベースのことをスキップできます。
if(!$search)
{
//.. return some warning error.
}
else
{
// Do what follows.
}
ここで、準備されたクエリとして使用できるクエリを作成する必要があります。つまり、準備されたステートメントを受け入れてクエリを準備し、クエリに実行される変数の配列を実行して、SQLを回避する必要があります。その間に注入:
$query = "SELECT * FROM Product WHERE ProductID LIKE :search;"; // Construct the query, making it accept a prepared variable search.
$statement = $db->prepare($query); // Prepare the query.
$statement->execute(array(':search' => $search)); // Here you insert the variable, by executing it 'into' the prepared query.
$statement->setFetchMode(PDO::FETCH_ASSOC); // Set the fetch mode.
while ($row = $statement->fetch())
{
$productId = $row['ProductID'];
echo "<li class='name><strong>$productId</strong></li>";
}
はい、bタグは使用しないでください。古くなっています。代わりにstrongを使用してください(font-weight:bold;を別のcssファイルの.nameに適用する方が賢明です。
ご不明な点がございましたら、お気軽にご質問ください。