Php 从MySQL检索mysqli\u real\u escape\u字符串

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

如果$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 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'";