mysqli :: query()期望参数2为long,给定字符串

时间:2011-07-29 14:40:44

标签: php mysqli

我正在创建自定义购物车和我',构建一个查询,首先检索我刚刚保存到购物车表中的session_id。我知道这个值已保存,我在mysql命令行运行此查询,它返回我需要的但是我没有将值输入$ cart_id。在脚本的这一点上面和下面还有其他INSERT查询,所以我知道我正好连接到数据库。

//Get cart id
$cart_id_select_q = "SELECT c.id FROM carts AS c WHERE c.user_session_id='$uid'";
$cart_id = $mysqli->query($conn, $cart_id_select_q);
echo "<pre>Debug: $cart_id_select_q</pre>";
if ( !$cart_id ) {
  printf("error: %s\n", mysqli_error($conn));
}
else {
  echo 'get session id from cart: execute success';
  print_r($cart_id);
  var_dump($cart_id);
}

我也在VPS服务器上有错误被抑制,而不是我没有在浏览器中显示mysqli_error但我在error_log中收到以下2个警告。

[29-Jul-2011 09:29:24] PHP Warning:  mysqli::query() expects parameter 2 to be long, string given in /home/sopadmin/public_html/dev/cart.php on line 89
[29-Jul-2011 09:29:24] PHP Warning:  mysqli_error() expects parameter 1 to be mysqli, null given in /home/sopadmin/public_html/dev/cart.php on line 92

我也试过使用mysqli_num_rows()和fetch_assoc(),但没有人帮忙。 $ cart_id保持为null,我不知道如何检索此服务器配置中的mysql错误。在整夜玩弄后,这里发布是最后的手段。

我应该注意,我刚刚开始真正使用新的mysqli扩展,我也开始以更OO的方式编写代码。但是我通常在程序上开始编码,然后在设计布局时创建类。但这只是对我的经验水平的评论,我不明白的是为什么这个查询没有在我的脚本中返回一个虚空。

2 个答案:

答案 0 :(得分:4)

使用面向对象的mysqli API时,您不需要(事实上您不能)将连接作为第一个参数传递。

这:$cart_id = $mysqli->query($conn, $cart_id_select_q);

应该是:$cart_id = $mysqli->query($cart_id_select_q);

而且:printf("error: %s\n", mysqli_error($conn));

应该是:printf("error: %s\n", mysqli->error);

我不知道$ conn是什么(看起来像一个字符串),但它肯定不是MySQLi连接对象。

答案 1 :(得分:-1)

避免此类失败的简单示例:

/* Select queries return a resultset */
$result = $mysqli->query("SELECT Name FROM City LIMIT 10");
if (!is_null($result)) {
    printf("Select returned %d rows.\n", $result->num_rows);

    /* free result set */
    $result->close();
} else {
    error_log("Mysql query failed" . $mysqli->error);
}