mysql_result替换为mysql_data_seek不正确计数

时间:2014-05-25 10:43:26

标签: php mysql mysqli

我正在尝试从Mysql升级到Mysqli,并通过该函数mysql_result升级到mysqli_data_seek。我设法做到了这一点,但所有统计数据都是错误的,我只计算了1而不是520。

我认为问题仍然存在mysqli_data_seek($res, 0);,因为mysql_result就像这个mysql_result($res, 0, 0);(它有3个参数)。

新规(Mysqi):

$link  = mysqli_connect("localhost", "my_user", "my_password", "world");
$query = "SELECT name FROM employee";
$res   = mysqli_query($link, $query)

if (mysqli_num_rows($res) == 0) {
    return false;
}

if (mysqli_num_fields($res) > 1) {
    return $this->sqlFetchArray($res);
} else {
    return mysqli_data_seek($res, 0);
}

旧代码(Mysql):

$link  = mysql_connect("localhost", "my_user", "my_password");
$query = "SELECT name FROM employee";
$res   = mysql_query($query);

if (mysql_num_rows($res) == 0) {
    return false;
}

if (mysql_num_fields($res) > 1) {
    return $this->sqlFetchArray($res);
} else {
    return mysql_result($res, 0, 0);
}

2 个答案:

答案 0 :(得分:2)

mysqli_data_seekmysqli_result的成员,它将指针移动到传递给函数的任意行。

来自the docs

$query = "SELECT Name, CountryCode FROM City ORDER BY Name";
if ($result = $mysqli->query( $query)) {

    /* seek to row no. 400 */
    $result->data_seek(399);

    /* fetch row */
    $row = $result->fetch_row();

    printf ("City: %s  Countrycode: %s\n", $row[0], $row[1]);

    /* free result set*/
    $result->close();
}

您遇到的问题是从mysql更改为mysqli并且described here by tuxedobob

  

将旧项目从使用mysql扩展转换为mysqli   扩展,我发现最烦人的变化是缺乏一个   mysqli中对应的mysql_result函数。虽然mysql_result是一个   通常很糟糕的功能,它对于获取单个数据非常有用   结果集中的结果字段 value (例如,如果查找a   用户的ID)。

     

虽然你可能想要,但mysql_result的行为在这里是近似的   将其命名为mysqli_result以外的其他东西,以避免思考   它是一个实际的内置功能。<​​/ p>

<?php 
function mysqli_result($res, $row, $field=0) { 
    $res->data_seek($row); 
    $datarow = $res->fetch_array(); 
    return $datarow[$field]; 
} 
?> 
  

通过OO界面实现它作为练习   阅读器。

答案 1 :(得分:-1)

我认为你的常识在他的评论中试图说的是从数据库中检索一堆数据然后在PHP中筛选它是没有意义的。数据库用于找到您需要的数据,因此您应该使用它。

您应该在SQL中使用WHERE,ORDER BY和LIMIT子句的某种组合。

也许你想找到薪水刚好低于500的最近雇佣的员工。

SELECT `name` FROM `employee` WHERE `hire_date` > '2014-05-01' AND `salary` < 500 ORDER BY `salary` DESC LIMIT 1

您正在尝试在应该使用SQL的地方使用PHP。如果您编写SQL以获取所需的信息,那么您将不需要数据搜索,这就是SQL的用途。

相关问题