[英]MySQL syntax:You have an error in your SQL syntax
我寫了一個非常簡單的函數:
function editCategory() {
$ID = urlencode($_GET['id']);
$cname = mysql_fix_string($_POST['cname']);
$kabst = mysql_fix_string($_POST['kabst']);
$kselect = $_POST['kselect'];
$subsl = $_POST['subsl'];
$kradio = $_POST['kradio'];
$ksubmit = $_POST['ksubmit'];
if (isset($ksubmit)) {
$query = "UPDATE category SET name = '$cname', description = '$kabst', published = '$kselect', home = '$kradio', subcat = '$subsl' WHERE id = $ID ";
$result = mysql_query($query);
if (mysql_affected_rows () == 1) {
echo "ok";
}
else{
echo mysql_error();
}
}
}
function mysql_fix_string($string)
{
if (get_magic_quotes_gpc())
$string = stripslashes(($string));
return mysql_real_escape_string($string);
}
錯誤:
您的SQL語法有誤; 檢查與您的MySQL服務器版本相對應的手冊,以在第1行的''附近使用正確的語法
怎么了?
$ID = intval($_GET['id']); //using urlencode here is weird
$cname = mysql_real_escape_string($_POST['cname']);
//and the same for the rest ALL.
$kradio = mysql_real_escape_string($_POST['kradio']);
也,
$ksubmit = $_POST['ksubmit'];
if (isset($ksubmit)) {
毫無意義。 $ ksubmit將始終設置為
if (isset($_POST['ksubmit'])) {
為確保您擁有所有變量,請在腳本頂部添加以下行:
ini_set('display_errors',1);
error_reporting(E_ALL);
您必須確保:
mysql_real_escape_string
intval
來確保
在這里,您可能應該:
$_GET['id']
上使用intval()
mysql_real_escape_string
。
id
以外的所有字段都用單引號引起來,我想說您必須在所有字段上使用mysql_real_escape_string
,當然,除了id
。
作為旁注:
$_GET
作為id
$_POST
用於其他所有內容。 那是故意的嗎?
聽起來像一個空變量。
並針對SQL注入進行一些操作,每個人都可以入侵您的數據庫。 幸運的是,您是一個殺死數據庫的人...將mysql_real_escape_string()用於查詢中的所有用戶輸入。
這是一個非常簡單的CRU D應用程序的示例,僅用於說明如何傳遞ID:
<?
mysql_connect();
mysql_select_db("new");
$table="test";
if($_SERVER['REQUEST_METHOD']=='POST') { //form handler part:
$name = mysql_real_escape_string($_POST['name']);
if ($id=intval($_POST['id'])) {
$query="UPDATE $table SET name='$name' WHERE id=$id";
} else {
$query="INSERT INTO $table SET name='$name'";
}
mysql_query($query) or trigger_error(mysql_error()." in ".$query);
header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
exit;
}
if (!isset($_GET['id'])) { //listing part:
$LIST=array();
$query="SELECT * FROM $table";
$res=mysql_query($query);
while($row=mysql_fetch_assoc($res)) $LIST[]=$row;
include 'list.php';
} else { // form displaying part:
if ($id=intval($_GET['id'])) {
$query="SELECT * FROM $table WHERE id=$id";
$res=mysql_query($query);
$row=mysql_fetch_assoc($res);
foreach ($row as $k => $v) $row[$k]=htmlspecialchars($v);
} else {
$row['name']='';
$row['id']=0;
}
include 'form.php';
}
?>
文件form.php:
<form method="POST">
<input type="text" name="name" value="<?=$row['name']?>"><br>
<input type="hidden" name="id" value="<?=$row['id']?>">
<input type="submit"><br>
<a href="?">Return to the list</a>
</form>
文件list.php:
<a href="?id=0">Add item</a>
<? foreach ($LIST as $row): ?>
<li><a href="?id=<?=$row['id']?>"><?=$row['name']?></a>
<? endforeach ?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.