2017-08-04 10 views
1

私はsomの入力を希望しているという問題があります。私は仕事をしている小さなプロジェクトにすべてのユーザをリストアップしたリストを作った。そのリストには、ユーザーが互いに訪問できるように、既存の各ユーザーとのリンクがあります。PHPの別のユーザへのリンクを正しく作るにはどうすればいいですか

リンクはこのように見えます。

<td> 
     <a href="otheruser.php?id=' .$row['id'].'"> 
     <i class="glyphicon glyphicon-user" aria-hidden="true">Presentation</i> 
     </a> 
    </td> 

このリンクは正しく動作します。その反対側に問題が始まります。 訪問したいユーザーのプロフィールページが表示されたら、このコードを使用してデータベースからユーザー情報を探します。

<?php 
$userId = $_GET['id']; 
$sql = "SELECT * FROM students WHERE id = " . intval($userId); 

$stmt = $dbh->prepare($sql); 

$stmt->execute(); 
?> 

これも機能しますが、これは良い形式ではないことがわかりました。 したがって、私は、同じページには、すべてのユーザーとお互いの上にすべての彼らのプレゼンテーションや画像 を示し

//$sql = "SELECT * FROM students WHERE id = id"; 

てみました。もう一度、別のユーザーに プレゼンテーションを正しく表示するにはどうしたらいいですか? また、私はそれが助けになる可能性がある場合は、MySQLiではなくPDOを使用します。あなたはPDOで準備されたクエリを使用する

$sql = "SELECT * FROM students WHERE id = id"; 

と近かった

+2

マニュアルの[Prepared Statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)を参照してください。この特定のケースでは、値を整数としてキャストしているので、コードは安全です。しかし、はい、Prepared Statementsを使い、それを一貫して使用する方が良いでしょう。 –

+0

別のページでIDを取得する – Bhargav

+0

@Bhargavもし私が習ってはいけないことを尋ねないならば。私には11のようなことを説明できますか? :P – Robert

答えて

0

、次の2つの方法、位置または名前のプレースホルダのいずれかでこれを変更することができます。

定位置:名前

$sql = "SELECT * FROM students WHERE id = ?"; 

$sql = "SELECT * FROM students WHERE id = :id"; 

"準備" を実行し、その後、実行文で値を追加します。

$stmt->execute([$userId]); // for positional 
$stmt->execute(['id' => $userId]); // for named 

(The only proper) PDO tutorial大きな助けとなっています私はPDOでスピードアップしています。

関連する問題