mysql到mysqli或PDO

时间:2014-06-09 00:43:36

标签: php mysql pdo mysqli

我这里有一个项目,下面有很多这样的代码。

这是mysql中的所有内容,我想更改mysqli或PDO。

问题是代码使表的字段成为循环内的变量。所以,如果我需要改变不同的东西,我将不得不重新编写数千行代码。因为在下面的循环中,我将更改var的每次调用。示例:$row["product_name"]而不是$product_name

这是代码:

$query = "SELECT product_name, product_price from products";

$result = mysql_query($query_sql);

while($row = mysql_fetch_array($result)) {
    $j = mysql_num_fields($query);
       for($i=0;$i<$j;$i++) {
            $k = mysql_field_name($query,$i);
            $$k = $row[$k];
        }

 //Here, inside the loop, I use $product_name instead of $row["product_name"]


}

有没有办法改变代码,用mysqli或PDO做同样的事情?我希望继续使用$field_name代替$row["field_name"]

3 个答案:

答案 0 :(得分:1)

显示了

mysqli对象方法。我不建议这样做,但可以做到。我会高度建议您学习如何直接处理结果对象或数组。像这样动态设置变量会带来很多不必要的开销。

$result = $mysqli->query($query_sql);

while($row = $mysqli->fetch_assoc($result)) {
    extract($row);

    //Here, inside the loop, I use $product_name instead of $row["product_name"]
}

答案 1 :(得分:0)

以下是您要找的内容:http://www.doctrine-project.org/

我特别不喜欢这个特定的项目,因为它对于大量数据来说往往很慢,但提供了你需要的东西:

您指定域类(将地图数据库行理解为php对象),并且只需指定表列的确切名称(如果它与类变量名称不匹配)。

因此,您为每个对象类型设置一次每个列,并在整个代码中使用该定义,您正在请求对象,该对象具有到数据库的映射。

所以它就像:$ entitiy_manager-&gt; getReference(&#39; myobject&#39;,$ objectid = 1); 创建一个新对象只是添加一个新的类实例。

如果我理解你的话,这应该就是你要找的。

答案 2 :(得分:-1)

感谢您的每一个答案和意见,但我刚刚找到了我的问题的解决方案。

我将离开这里,以备将来参考。

此代码位于mysql:

$result = mysql_query($query);
while($row = mysql_fetch_array($result))
{
    $j = mysql_num_fields($query);
    for($i=0;$i<$j;$i++) {
        $k = mysql_field_name($query,$i);
        $$k = $row[$k];
    }
}

这在mysqli中也是一样的:

$result = mysqli_query($link, $query);
while($row = $query->fetch_assoc())
{
    $j = mysqli_num_fields($query);
    for($i=0;$i<$j;$i++) {
        $k =  mysqli_fetch_field_direct($query, $i)->name;
        $$k = $row[$k];
     }

}