首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何知道何时需要对MySQL进行转义

问如何知道何时需要对MySQL进行转义
EN

Stack Overflow用户
提问于 2010-04-12 08:33:26
回答 7查看 459关注 0票数 6

我正在用CodeIgniter建立一个网站。这是我自己建立的第一个与数据库交互的网站。我在这个项目中使用了MySQL。在将数据保存到数据库之前,如何判断数据是否需要转义?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-04-12 08:43:01

如果将database class与query bindings一起使用,则不需要进行任何手动转义:

使用绑定的第二个好处是值被自动转义,从而产生更安全的查询。您不必记住手动转义数据;引擎会自动为您转义。

票数 3
EN

Stack Overflow用户

发布于 2010-04-12 08:48:00

我建议你习惯使用准备好的语句。特别是因为您不熟悉数据库。你越早开始使用它们,它就越容易成为第二天性。

例如,当我开始使用数据库时,我并不知道准备好的语句。当我与他们接触时,我体验到了我自己的固执。因为我已经习惯了用另一种方式做事。现在,这可能不是你自己的性格交易,但无论哪种方式,尽快开始都没有坏处。

预准备语句允许您在查询中使用占位符。然后,通过将这些占位符绑定到占位符,这些占位符可以替换为实际值。此绑定过程会自动转义这些值。

下面是一个(简单的) PDO示例:

代码语言:javascript
复制
$db = new PDO( /* some database parameters */ );
$statement = $db->prepare( 'INSERT INTO table VALUES( :username, :password )' );
$statement->bindValue( ':username', $dirtyUsername );
$statement->bindValue( ':password', $dirtyPassword );
$result = $statement->execute();
// result checking ommited for brevity

PDO和预准备语句有更多的可能性。例如,您可以很容易地在循环中重用准备好的语句,如下所示:

代码语言:javascript
复制
$statement = $db->prepare( 'INSERT INTO table VALUES( :username, :password )' );
foreach( $users as $dirtyUser )
{
    $statement->bindValue( ':username', $dirtyUser->username );
    $statement->bindValue( ':password', $dirtyUser->password );
    $result = $statement->execute();
    // result checking ommited for brevity
}

或者将占位符绑定传递给execute方法,如下所示:

代码语言:javascript
复制
$statement = $db->prepare( 'INSERT INTO table VALUES( :username, :password )' );
$result = $statement->execute( array( 
                                   ':username' => $dirtyUsername, 
                                   ':password' => $dirtyPassword
                             ) );
// result checking ommited for brevity

..。等等。

票数 8
EN

Stack Overflow用户

发布于 2010-04-12 08:38:37

不要担心自己会逃脱(你会搞砸的)。使用DB层,首先准备语句,然后向其中添加数据。

在PHP中,你应该使用PDO。你写

代码语言:javascript
复制
SELECT * FROM table WHERE key = :key AND value = :value

然后通过调用函数将数据添加进去。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2619295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档