Php 从MySQL检索mysqli\u real\u escape\u字符串
如果$t包含撇号,例如Php 从MySQL检索mysqli\u real\u escape\u字符串,php,mysql,Php,Mysql,如果$t包含撇号,例如 // inserting into DB from form if (!empty($_POST['Title'])) { $t = mysqli_real_escape_string($dbc, ($_POST['Title'])); } else { $errors[] = 'Please enter a Headline title'; } // Add the news to the database: $q = 'INSERT INTO n
// inserting into DB from form
if (!empty($_POST['Title'])) {
$t = mysqli_real_escape_string($dbc, ($_POST['Title']));
} else {
$errors[] = 'Please enter a Headline title';
}
// Add the news to the database:
$q = 'INSERT INTO news ( Title, Content) VALUES (?, ?)';
$stmt = mysqli_prepare($dbc, $q);
mysqli_stmt_bind_param($stmt, 'ss', $t, $c);
mysqli_stmt_execute($stmt);
它会将其添加到数据库中,如下所示
We're awesome
稍后:
然后如何运行title=$t的查询
"we\'re awesome"
查询失败,因为撇号有效地切断了SQL
$q = "SELECT * FROM news WHERE title= '$t'";
您在搜索中再次使用mysqli\u real\u escape\u字符串,就像您在insert中所做的那样
SELECT * FROM news WHERE title = ' we're awesome
就这样。您可以转义或使用准备好的语句,但不能两者都使用 你确定你在说什么吗?:)有一些误解。您告诉我们它正在插入
我们很棒
,因此声明必须是选择新闻中的*FROM news WHERE title='we're awesome'
。不是吗?备注:为什么不:$q=“从标题=?”的新闻中选择*”
<代码>$stmt=mysqli\u prepare($dbc,$q);mysqli_stmt_bind_param($stmt,'s',$row['title']);mysqli_stmt_execute($stmt)代码>啊,好的,那么通过使用准备好的语句,它已经清理了任何用户输入?您是否建议拆下安全带。准备好的陈述是最先进的,易于使用,可以替代逃避。另请参见堆栈溢出经典。
$t = mysqli_real_escape_string($link,$t);
$q = "SELECT * FROM news WHERE title= '$t'";