我正在用CodeIgniter建立一个网站。这是我自己建立的第一个与数据库交互的网站。我在这个项目中使用了MySQL。在将数据保存到数据库之前,如何判断数据是否需要转义?
发布于 2010-04-12 08:43:01
如果将database class与query bindings一起使用,则不需要进行任何手动转义:
使用绑定的第二个好处是值被自动转义,从而产生更安全的查询。您不必记住手动转义数据;引擎会自动为您转义。
发布于 2010-04-12 08:48:00
我建议你习惯使用准备好的语句。特别是因为您不熟悉数据库。你越早开始使用它们,它就越容易成为第二天性。
例如,当我开始使用数据库时,我并不知道准备好的语句。当我与他们接触时,我体验到了我自己的固执。因为我已经习惯了用另一种方式做事。现在,这可能不是你自己的性格交易,但无论哪种方式,尽快开始都没有坏处。
预准备语句允许您在查询中使用占位符。然后,通过将这些占位符绑定到占位符,这些占位符可以替换为实际值。此绑定过程会自动转义这些值。
下面是一个(简单的) PDO示例:
$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 brevityPDO和预准备语句有更多的可能性。例如,您可以很容易地在循环中重用准备好的语句,如下所示:
$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方法,如下所示:
$statement = $db->prepare( 'INSERT INTO table VALUES( :username, :password )' );
$result = $statement->execute( array(
':username' => $dirtyUsername,
':password' => $dirtyPassword
) );
// result checking ommited for brevity..。等等。
发布于 2010-04-12 08:38:37
不要担心自己会逃脱(你会搞砸的)。使用DB层,首先准备语句,然后向其中添加数据。
在PHP中,你应该使用PDO。你写
SELECT * FROM table WHERE key = :key AND value = :value然后通过调用函数将数据添加进去。
https://stackoverflow.com/questions/2619295
复制相似问题