PHP MYSQLi real_escape_string [关闭]
Posted
技术标签:
【中文标题】PHP MYSQLi real_escape_string [关闭]【英文标题】:PHP MYSQLi real_escape_string [closed] 【发布时间】:2012-09-06 06:56:35 【问题描述】:这是我的查询运行代码:
$sqlm = getPageById();
if ($resultm = $mysqli->prepare($sqlm))
$mypageid = 216;
$resultm -> bind_param("i",$mypageid);
$resultm->execute();
$resultm->store_result();
$rowsm = $resultm->num_rows;
if($rowsm > 0)
$rowm = fetch($resultm);
$pagetitle = $mysqli->real_escape_string($rowm[0]["page_title"]);
$pageContent = $rowm[0]["page_content"];
$pageurlname = $mysqli->real_escape_string($rowm[0]["page_name_url"]);
这是我的查询:
function getPageById()
$sqlStr = "select * from tbl_pages where page_id = ?";
return $sqlStr;
这就是我邮寄的内容:
$mysqli->real_escape_string ($_POST["page_content"]);
这是我的echo
:
$pageContent = $rowm[0]["page_content"];
<?=$pageContent?>
我在回声中遇到问题 我从数据库中得到这样的结果:
代替:*** .. 我得到:堆栈/r/n//over/r/n/flow 请问有什么帮助吗?
【问题讨论】:
问题出在...? 您忘记在问题中提问。 @michael:你有什么问题?您收到什么错误消息? 【参考方案1】:mysqli_real_escape_string
用于清理您要插入到 SQL 查询中的字符串(如果您使用这种老式方式而不是使用准备好的语句)。它不用于处理查询的结果。
如果您要将结果插入网页,您需要的函数是htmlentities
。例如
$pagecontent = htmlentities($rowm[0]["pagecontent"]);
在查询数据库时使用准备好的语句可以防止 SQL 注入。将结果放在网页上时使用htmlentities
可防止跨站点脚本攻击。
【讨论】:
你的意思是当我插入数据库时我不需要real_escape_string? ...这是我在 $_POST 中发送的内容:$mysqli->real_escape_string ($_POST["page_content"]);
,,, 我应该在帖子中使用什么代码以及将结果回显到我的页面中的什么?
你的意思是我不需要使用$mysqli->real_escape_string
?只是:$string = $_POST["fieldname"];
?并在处理查询的结果时只是回显:$name = $row["name"];
echo $name;
?
我在你的原始问题中没有看到任何插入,所以我不知道你是否需要使用 mysqli_real_escape_string。这取决于您如何编写插入 - 如果您使用$mysqli->prepare
,则不需要使用它。
啊,好吧,谢谢:D ...我是的,在我所有的查询中使用$mysqli->prepare
,插入、编辑、更新,谢谢@Barmar先生
是的,它似乎是一个 SELECT,而不是一个 INSERT。【参考方案2】:
看起来好像数据是问题,而不是您的 php 代码。您确定这些换行符不在数据库中吗?
【讨论】:
是的,它们在数据库中:S ...因此我将我的 $_POST 代码:S ...它们在数据库中存储!以上是关于PHP MYSQLi real_escape_string [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
php mysqli mysqli_query() mysqli_real_query()