「get_magic_quotes_gpc」の後方互換性がない php 5.3 から 5.4 にアップグレードしています。コードが機能することは理解していますが、毎回 FALSE を返すだけです。
しかし、コードからこれを削除する時が来たと思います。
典型的な例を次に示します。
$product_id = "0";
if (isset($HTTP_GET_VARS["id"])) {
$rid = (get_magic_quotes_gpc()) ? $HTTP_GET_VARS["id"] : addslashes($HTTP_GET_VARS["id"]);
}
//then $product_id gets used all over the place in many different queries
これを修正する方法を研究してきましたが、これが私が思いついたものです:
$rid = "0";
if (isset($HTTP_GET_VARS["id"])) {
$rid = addslashes($HTTP_GET_VARS["id"]);
}
私はここで頭を少し超えています。これはすべてSQLインジェクションなどに関係していることを私は知っています。私の解決策は合理的/容認できるものですか?
前もって感謝します。
<<<< 編集 - 追加情報 >>>>
返信ありがとうございます。実際、約 18 か月前に PDO への変換を多数行いました (主に、この種のスタックオーバーフローに関するアドバイスによるものです :)
そのため、冗長で無意味なコードが実行されている可能性があります。これは、URL から変数を取得する、上に投稿したコードの下で何が起こっているかの全体像です。
以前はそこにあった (get_magic_quotes_gpc) が、コメント アウトされて (addslashes) に置き換えられていることがわかります。しかし、その変数は PDO クエリに渡されます。
$product_id = "0";
if (isset($HTTP_GET_VARS["id"])) {
//$product_id = (get_magic_quotes_gpc()) ? $HTTP_GET_VARS["id"] : addslashes($HTTP_GET_VARS["id"]);
$product_id = addslashes($HTTP_GET_VARS["id"]);
}
// NEW QUERIES - BEG xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
try {
# MySQL with PDO_MYSQL
$pdo = new PDO("mysql:host=$hostname_db;dbname=$database_db", $username_db, $password_db);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
// Query 1: product details
$stmt = $pdo->prepare('SELECT
[a bunch of stuff here, fields, joins, etc]
WHERE product_id = ? ');
$stmt -> execute(array($rid));
$row_count_resto_details = $stmt->rowCount();
$row_resto_details = $stmt->fetch(PDO::FETCH_ASSOC);
}
// Error message for pdo
catch(PDOException $e) {
echo $e->getMessage();
}
// END QUERY xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
最初の 4 ~ 5 行のコードをすべて削除して、次のようにすることはできますか。
$product_id = $HTTP_GET_VARS["id"];