2016-04-26 9 views
1

phpMyAdminとmysqlについて学び始めました。ここには質問があります。私は「生徒」のテーブルで何かを選択して、結果をエコーし​​ます。しかし、私がチェックすると、それは検索のための0行を返します。私はそれを私のデータベースに持っています。私は問題が何であるかを知らないmysql、phpの属性を選択

$conn = new mysqli($servername, $username, $password, $dbname); 

    $params="@name varchar(30)"; 
    $paramslist="@name='$name%"; 

    $sql = "SELECT name,address,city,birthday FROM student WHERE [email protected]"; 

    $dbsql = "EXEC sp_executesql 
     N'$sql', 
     N'$params', 
     $paramslist"; 

    $result = $conn->query($sql); 
    ECHO $result->num_rows; 

: はここに私のコードです。助けてくれてありがとう。

+2

で指定された変数にバインドされています。なぜあなたは[prepared statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)と['bind_param'](http://php.net/manual /en/mysqli-stmt.bind-param.php)もっと簡単にこれを行う?私は '$ name'が適切にエスケープされていないので、このすべての問題を解決するにもかかわらず、SQLインジェクションのバグが残っていると思います。 – tadman

+1

は大文字と小文字の区別がありませんか?あなたは 'name'と' NAME'を使用しています – RST

+0

(現代の)教科書とチュートリアルに記載されている方法に従わないのはなぜですか? – Strawberry

答えて

0
$sql = "SELECT name,address,city,birthday FROM student WHERE name=".$name; 
$result = $conn->query($sql); 
echo $result->num_rows(); 
0

これは、以下のプリペアドステートメントを使用しています

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 

// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
$name='Veshraj Joshi'; 
$stmt = $conn->prepare("SELECT name,address,city,birthday FROM student WHERE NAME=?"); 

/* bind parameters for markers */ 
$stmt->bind_param("s", $name); 

/* execute query */ 
$stmt->execute(); 

$result = $stmt->get_result(); 

/* now you can fetch the results into an array */ 
while ($student = $result->fetch_assoc()) { 

    // use your $student array as you would with any other fetch 
    echo $student['address'].'<br>'; 
} 
+0

それがあなたのために働くかどうかを教えてください.... –

0

プリペアドステートメントを私のためにどのような作品です。 SQLインジェクション攻撃を防御するためには、ユーザー入力を含めるときには常にプリペアドステートメントを使用する必要があります。

たびfetch()実行は、結果はこれがあなたのクエリを実行するための非常に奇妙な方法であるbind_result()

$conn = new mysqli($servername, $username, $password, $dbname); 
$query = "SELECT name,address,city,birthday FROM student WHERE name=?"; 
$stmt = $conn->prepare($query); 
$searchTerm = "%$name%"; 
$stmt->bind_param('s', $searchTerm); 
$stmt->execute(); 
$stmt->bind_result($resultName, $resultAddress, $resultCity, $resultBirthday); 
while($stmt->fetch()) 
{ 
    echo $resultName . " " . $resultAddress . " " . $resultCity . "<br/>"; 
} 
関連する問題