-1

以前、php でプロジェクトに取り組んでいましたが、配列を文字列に変換しているという通知を受けました。通知を回避する方法があるかどうか疑問に思っていましたか?

if(isset($_POST['acceptrequest' . $user_from])) {
    $get_friend_check = mysql_query("SELECT friend_array FROM users WHERE username='$user'");
    $get_friend_row = mysql_fetch_assoc($get_friend_check);
    $friend_array = $get_friend_row['friend_array'];
    $friendArray_explode = explode(",",$friend_array);
    echo $friendArray_explode;
}
4

1 に答える 1

2

基本的な MySQL ドライバーは推奨されておらず、SQL インジェクションに対して脆弱であるため、別の MySQL ドライバー (MySQLi または PDO) を使用する必要があります。

SQL インジェクションを防ぐために、準備済みステートメントを使用する必要があります。

$selectFriendsStatement = $pdo->prepare('SELECT friend_array FROM users WHERE username=?');
$selectFriendsStatement->execute(array($user));

それ以外の

$get_friend_check = mysql_query("SELECT friend_array FROM users WHERE username='$user'");

camelCaseまたはunderscore_case 変数名で一貫して使用する必要があります。$friend_array_explodeの代わりに使用し$friendArray_explodeます。

何かを行う前に、postData を検証する必要があります。

配列として格納する代わりに、1:n または n:m の関係で、次のような集計関数を使用GROUP_CONCAT()して、友人用に別のテーブルを追加する必要があります。

テーブル名と列名を特別な引用符で囲み、MySQL 列名の前にプレフィックスを付けて名前の競合を避ける必要があります。

`users`.`name`

の代わりにusername

変数、関数、クラスに意味のある名前を付ける必要があります。たとえば、selectFriendsResult代わりにget_friend_check.

fetch assoc ではなく、1 つの列のみをフェッチする場合は、fetch column を使用する必要があります。

于 2014-06-08T21:26:54.660 に答える