MySQL中的理解断开连接

时间:2011-06-17 22:03:37

标签: php mysql

新手提醒

mySQL表“tokens”包含一个字段“dl”(DL),它是一个整数(值:0,1或2)

对于字段“token”== $ stripped_token的行,“dl”的当前值为0

我希望阅读记录,增加字段“DL”(零)中找到的数字并更新记录。这是我正在尝试的:

function sql_update_token($stripped_token)
{
    global $mysqli ;
    $curr_dl = $mysqli->query("SELECT dl FROM tokens WHERE token = ".$stripped_token) or die (mysqli_error());
    $new_num = $curr_dl + 1;
    $result = $mysqli->query("UPDATE tokens SET dl=".$new_num." WHERE token = ".$stripped_token) or die (mysqli_error());
}

字段DL的值现在为“2”!为什么2?

在上面的故障排除中,我尝试了这个:

function sql_get_dl($stripped_token)
{
    global $mysqli ;
    $curr_dl_num = $mysqli->query("SELECT dl FROM tokens WHERE token = ".$stripped_token) or die (mysqli_error());
    return $curr_dl_num;
}


$test = sql_get_token($stripped_token);
echo('[$test] == [ '.$test.' ]<br />');

问题是$ test不包含数字“0”,正如我所希望的那样。相反,它包含:“current_field”,“field_count”,“lengths”,“num_rows”和“type”(这些文本字符串,在数组中。

我的错误是什么?

1 个答案:

答案 0 :(得分:1)

一个问题是msysqli-&gt;查询不会返回您认为它返回的值。它返回一个结果对象。然后,您需要获取该结果中的数据。即:

global $mysqli ;
$result = $mysqli->query("SELECT dl FROM tokens WHERE token = ".$stripped_token) or die (mysqli_error());
$row = $result->fetch_row();
$curr_dl_num = $row[0];

将$ result视为一个表。 fetch_row()获取第一行,$ row [0]获取该行的第一个单元格。这真的很不方便,因为你只获得一个包含一个值的表,但是对于其他返回多个结果的查询,能够使用fetch_row()逐步执行这些查询非常有用。

同样,你是如何生成$ stripped_token值的,因为你说这不符合你的预期?如果您是从mySQL查询中读取它,那么您的问题可能是相同的 - 它可能是结果对象,而不是您期望的单个值。

修改 别担心$ stripped_token,我误解了你问题的最后一部分。