2016-04-26 47 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)這樣做更容易嗎?我認爲,儘管經歷了所有這些麻煩,但您仍然有SQL注入漏洞,因爲'$ name'沒有正確轉義。 – 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/>"; 
}