![](/img/trans.png)
[英]PHP mysqli_real_escape_string() not working inside function
[英]mysqli_real_escape_string in function, not working?
我按照老師在網上講課的方式制作了函數。 但是它不起作用,該錯誤消息首先說存在一個變量缺失。 所以我檢查了一下,在w3schools上,他們說您需要連接為varibale和字符串。 所以我添加了連接,但是隨后出現一個錯誤,指出未定義的vas。 我試着將函數放在php文檔的不同位置,但是我不知道如何解決這個問題,請幫助?
我的代碼(我刪除了密碼):
<?php
// A function to help prevent SQL Injection.
function preparePostData($value)
{
// Removes slashes (/) if the server automaticlly adds them.
if(get_magic_quotes_gpc()){
$value = stripslashes($value);
}
/* Adds quote marks if the value is not numeric or a numeric string.
mysqli_real_escape_string adds slashes (/) if there is any character thats not allowed
and then the text string will not be processed in MySQL. */
if(!is_numeric($value)){
$value = "'" . mysqli_real_escape_string($dbConn, $value) . "'";
}
return $value;
}
// If the submit button is set do this..
if(isset($_POST['saveNews'])){
// Connection to db
$dbConn = mysqli_connect("localhost","sabe0011","password","sabe0011");
// Check connection
if(mysqli_connect_errno($dbConn)){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// SQL question
$insertSQL = "INSERT INTO News (NewsId, Headline, News, Date) VALUES ('NULL',".preparePostData($_POST['newsHeader']).",".preparePostData($_POST['news']).",".preparePostData($_POST['newsDate']).");";
if(mysqli_query($dbConn, $insertSQL)){
echo "Nyheter har sparats";
}
else{
echo "Följande fel uppstod " . mysqli_error() . ".";
}
}
// Connection to db
$dbConn = mysqli_connect("localhost","sabe0011","password","sabe0011");
$dbConn->set_charset("utf8");
// Check connection
if(mysqli_connect_errno($dbConn)){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$newsSQL = mysqli_query($dbConn,"SELECT * FROM News ORDER BY Date;");
echo "<div>";
if(mysqli_num_rows($newsSQL) > 0)
{
while($rowNews = mysqli_fetch_array($newsSQL)){
echo '<h2>' . $rowNews["Headline"] . '</h2>' . '<time>' . $rowNews["Date"] . '</time>' . '<p>' . $rowNews["News"] . '</p>';
}
}
else{
echo "Inga nyheter hittades";
}
echo "</div>";
?>
如果您在腳本的頂部進行連接,則需要以某種方式將其傳遞給您的函數。 您有兩個選擇。 在您的函數中將其設為參數。 function reparePostData($value,$dbconn);
或者,您可以在函數內部將連接聲明為全局變量,並允許函數在global $dbconn;
函數內部訪問此變量global $dbconn;
。
您使用此功能的方式錯誤。
mysqli_real_escape_string 與POST數據無關 。 只有魔術引號可以。
因此,您必須將此函數分為兩個部分:
一個產生正確的字符串文字的
function prepareSQLliteral($value) { if(!is_numeric($value)){ global $dbConn; $value = "'" . mysqli_real_escape_string($dbConn, $value) . "'"; } return $value; }
但是,使用手動格式不是可行的方法。
不必對全局變量執行相同的處理,而要對要查詢的值進行相同的處理。 而且只有准備好的語句才能做到這一點。
但是由於mysqli准備好的語句非常不可用,因此必須使用PDO 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.