2012-12-03 35 views
1

嗨,你好我的MySQL代码转换为MySQLi,因为它更安全,但AFAIK MySQLi本身并不是更安全。mysql到mysqli转换

我用转换器在选择回答这个话题: Updating from MYSQL to MYSQLI

和代码工作,但现在我不知道究竟该怎么做,我知道我必须准备querys但究竟在何处以及如何准备我不知道...

例如,如果我有一个插入查询5个或更多的PHP变量可以吗?我该怎么做?我发现的所有例子都是一个变量......并且在查询之前立即准备好了吗?

我难过吗?我很抱歉,如果这是非常基本的东西,但我完全noob与此,我想要的是一些指导方针...

+1

不要升级为“安全”。这一切都归结为程序员的能力和知识。使用mysqli或pdo不会立即使任何“更安全”。如果你知道你在做什么,mysql可以非常安全。相反,升级到pdo或mysqli是因为mysql已被弃用。 –

+0

...因为mysql强制你编写代码时没有一些方便的基本功能,比如预准备语句。 –

+1

不要敲OP;他正在问完全正确的问题,并希望做正确的事情。让我们鼓励。在任何情况下,实际上在旧的mysql库中都存在一些安全性问题,即使您不打算使用准备好的查询等新功能,也可以避免这种情况。 – SDC

回答

4

下面是一个具有多个参数的INSERT查询的示例。

/* create a prepared statement */ 
if ($stmt = $mysqli->prepare("INSERT INTO mytable (field1, field2, field3) VALUES(?, ?, ?)")) { 

    /* bind parameters for markers */ 
    $stmt->bind_param("sss", $field1, $field2, $field3); 

    /* execute query */ 
    $stmt->execute(); 

    /* close statement */ 
    $stmt->close(); 
} 

正如你可以看到$field1$field2,并且$field3将被绑定为字符串(注意三个s),将取代在查询中?

Bind param types

I - 对应的变量的类型为整数
d - 对应的变量的类型为双
秒 - 对应的变量的类型为字符串
b - 对应变量是一个blob和将被发送in packets

+0

,如果它不是字符串?一些整数和浮点数是我的吗? –

+1

更新了与其他类型的答案 – MrCode

+0

谢谢:)所以在其他使其他任何查询就像那样,我替换如右例中的变量? stmt需要每次都关闭吗? –