如果插入用户输入而不修改SQL查询,则应用程序容易受到SQL注入的攻击,如下例所示:
$unsafe_variable = $_POST['user_input'];
mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");
Run Code Online (Sandbox Code Playgroud)
这是因为用户可以输入类似的内容value'); DROP TABLE table;--,查询变为:
INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')
Run Code Online (Sandbox Code Playgroud)
可以采取哪些措施来防止这种情况发生?
我有一个mysqli查询与以下代码:
$db_usag->query("UPDATE Applicant SET phone_number ='$phone_number',
street_name='$street_name', city='$city', county='$county', zip_code='$zip_code', day_date='$day_date', month_date='$month_date',
year_date='$year_date' WHERE account_id='$account_id'");
Run Code Online (Sandbox Code Playgroud)
但是,所有数据都是从HTML文档中提取的,所以为了避免错误,我想使用预准备语句.我找到了PHP文档,但没有UPDATE示例
任何人都可以帮助我理解为什么这个更新查询没有更新我的数据库中的字段?我在我的php页面中有这个从数据库中检索当前值:
<?php
$query = mysql_query ("SELECT * FROM blogEntry WHERE username = 'bobjones' ORDER BY id DESC");
while ($row = mysql_fetch_array ($query))
{
$id = $row['id'];
$username = $row['username'];
$title = $row['title'];
$date = $row['date'];
$category = $row['category'];
$content = $row['content'];
?>
Run Code Online (Sandbox Code Playgroud)
这是我的HTML表单:
<form method="post" action="editblogscript.php">
ID: <input type="text" name="id" value="<?php echo $id; ?>" /><br />
Username: <input type="text" name="username" value="<?php echo $_SESSION['username']; ?>" /><br />
Title: <input type="text" name="udtitle" value="<?php echo $title; ?>"/><br />
Date: <input type="text" name="date" value="<?php …Run Code Online (Sandbox Code Playgroud) 我一直茫然地看着这个错误,似乎无法知道问题是什么.当我运行查询时,我收到此错误:
意外的T_ENCAPSED_AND_WHITESPACE,期望此行的T_STRING或T_VARIABLE或T_NUM_STRING:
$sqlupdate1 = "UPDATE table SET commodity_quantity=$qty WHERE user=$rows['user'] ";
Run Code Online (Sandbox Code Playgroud) 我一直在看这段代码一段时间,我看不出问题出在哪里.我一直在阅读整个StackOverflow,但仍无法看到我的错误.
<?php
mysqli_connect("localhost","root","","web_table");
mysql_select_db("web_table") or die(mysql_error());
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
echo "<p> Connection Successful!"
mysqli_query('INSERT INTO web_formitem (ID, formID, caption, key, sortorder, type, enabled, mandatory, data) VALUES (105, 7, Tip izdelka (6), producttype_6, 42, 5, 1, 0, 0)');
echo "<p>Insert successfull";
?>
Run Code Online (Sandbox Code Playgroud)
错误在第13行的某处,那就是mysqli_query('insert....我试图用http://www.w3schools.com/php/php_mysql_insert.asp来帮助自己,但这对我帮助不大.
当我的插入查询包含引号(例如Kellog's)时,它无法插入记录.
错误味精:
您的SQL语法有错误; 查看与您的MySQL服务器版本相对应的手册,以便在's','Corn Flakes 170g','$ 15.90','$ 15.90','$ 14.10',' - '''附近使用正确的语法1MySQL更新错误:
第一's',应该是Kellogg's.
有什么解决方案吗?
我试图找到与特定模式匹配的行数.在这个例子中,所有以"123"开头:
这是有效的:
$query = mysql_query("SELECT * FROM table WHERE the_number LIKE '123%'");
$count = mysql_num_rows($query);
Run Code Online (Sandbox Code Playgroud)
问题是LIKE会有所不同,所以我试图在脚本中定义它,然后执行查询,但这不起作用:
$prefix = "123";
$query = mysql_query("SELECT * FROM table WHERE the_number LIKE $prefix.'%'");
$count = mysql_num_rows($query);
Run Code Online (Sandbox Code Playgroud)
如何在第二个示例中使此查询正常工作?
编辑:我也没有期限尝试过(也没有工作):
$query = mysql_query("SELECT * FROM table WHERE the_number LIKE $prefix'%'");
Run Code Online (Sandbox Code Playgroud) 我是PHP和MySQL的新手,我只是想不出这个.我在论坛周围搜索过但没有找到我能理解的答案.我最初使用的是mysql_fetch_assoc(),但我只能搜索数字,并且在搜索字母时也收到了错误.我希望我在这里走在正确的轨道上.提前感谢您的帮助!
$con = mysqli_connect($hostname,$username,$password) or die ("<script language='javascript'>alert('Unable to connect to database')</script>");
mysqli_select_db($con, $dbname);
if (isset($_GET['part'])){
$partid = $_GET['part'];
$sql = 'SELECT *
FROM $usertable
WHERE PartNumber = $partid';
$result = mysqli_query($con, $sql);
$row = mysqli_fetch_assoc($result);
$partnumber = $partid;
$nsn = $row["NSN"];
$description = $row["Description"];
$quantity = $row["Quantity"];
$condition = $row["Conditio"];
}
Run Code Online (Sandbox Code Playgroud) function save($gmt, $name, $address, $phone, $remark)
{
$query= "INSERT INTO `user` (`gmt`, `name`, `address`, `phone`, `remark`) VALUES ('$gmt', '$name', '$address', '$phone', '$remark')";
mysql_query($query);
}
Run Code Online (Sandbox Code Playgroud)
这里的地址,电话和备注可以是NULL值.我需要它,以便当我将null参数传递给我的函数时,它在数据库中存储一个空值(NULL).我需要知道这样做的最佳解决方案是什么.
谢谢.
我正在尝试创建一个SQL查询以将用户信息插入到数据库中.在$fname与$lname变量包含正确的值("约翰"和"李四"),但查询失败.这是我的代码:
$fname = $_POST['first_name'];
$lname = $_POST['last_name'];
$sql = "INSERT INTO users (fname, lname) VALUES ($fname, $lname)";
mysqli_query($conn, $sql);
Run Code Online (Sandbox Code Playgroud)
检查错误消息后,我发现此查询失败并显示错误消息
"字段列表"中的未知列"John"
如何正确地将变量包含到SQL查询中以使其在没有错误的情况下运行?