我这里有一个项目,下面有很多这样的代码。
这是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"]
。
答案 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); 创建一个新对象只是添加一个新的类实例。
如果我理解你的话,这应该就是你要找的。 p>
答案 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];
}
}