Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用绑定网络运行mysqli命令时出错fet_行为非对象_Php_Mysql_Mysqli - Fatal编程技术网

Php 使用绑定网络运行mysqli命令时出错fet_行为非对象

Php 使用绑定网络运行mysqli命令时出错fet_行为非对象,php,mysql,mysqli,Php,Mysql,Mysqli,我正在编写以下代码: $conn = new mysqli($server,$user,$pw,$db) or die ('Could not connect to DB'.mysqli_error()); $id = 12345; $sql = 'select * from invTypes where typeId = ? and published = 1'; $stmt = $conn->prepare($sql); $stmt->bind_param("i",$id);

我正在编写以下代码:

$conn = new mysqli($server,$user,$pw,$db) or die ('Could not connect to DB'.mysqli_error());

$id = 12345;

$sql = 'select * from invTypes where typeId = ? and published = 1';
$stmt = $conn->prepare($sql);
$stmt->bind_param("i",$id);
$stmt->execute();
$res = $stmt->get_result();

$row = $res->fetch_assoc();

//process $row's data.
当在mysql内部使用int而不是问号运行查询时,它可以工作。看来我的捆扎和取回方式有问题

我正在翻阅文档,似乎我有点困惑,我该如何处理这个错误

编辑:我在文档中读到了这一点

$stmt = $mysqli->prepare("SELECT id, label FROM test WHERE id = 1");
$stmt->execute();
$res = $stmt->get_result();
$row = $res->fetch_assoc();
并把它应用到上面。还是。错误是:致命错误:调用未定义的方法mysqli_stmt::get_result()

如前所述,
mysqli_stmt::fetch
不会返回结果,它会设置绑定的变量值


要从
mysqli
检索可编辑的结果集,请使用
mysqli\u stmt::get\u result
,这反过来要求安装。例如,在Ubuntu上,它可以作为包
php5 mysqlnd
安装。检查
phpinfo()
的输出;mysqlnd应该有一个完整的部分

问题在于这一行

$res = $mysqli_stmt_fetch($stmt);
以下是一些错误:

  • mysqli\u stmt\u fetch()
    函数前面有一个不正确的美元(
    $
    )符号
  • mysqli\u stmt\u fetch()
    函数实际上是将准备好的语句中的结果提取到绑定变量中,并且在代码中没有使用任何
    ->bind\u result()
    方法
以下是参考资料:

因此解决方案是,由于您使用的是
SELECT*
而不是
SELECT column1,column2
,因此最好使用
->get_result()
方法来获取结果集

以下是参考资料:

因此,您的代码应该如下所示:

// your code

$sql = 'select * from invTypes where typeId = ? and published = 1';
$stmt = $conn->prepare($sql);
$stmt->bind_param("i",$id);
if($stmt->execute()){
    $res = $stmt->get_result();
    $row = $res->fetch_assoc(); 
}

建议:不要混淆mysqli的过程风格和面向对象风格

是一个自定义函数吗?我对此表示怀疑。语法为
bind_param
。对不起,打错了。已调整。尽管如此,请参阅手册。阅读。我似乎不明白为什么
res
返回致命错误:对非对象调用成员函数fetch\u assoc()
$mysqli\u stmt\u fetch($stmt)
这是一个变量,不是一个函数,它根本不是面向对象的,这对我来说似乎不太管用。请参见我的编辑“您混淆了mysqli的过程式和面向对象的风格”-不推荐,但它确实有效;-)@FallenReapper
get_result()
方法仅适用于
mysqlnd
,请参阅。@Fred ii-是的,这更像是一个礼貌的建议,而不是致命的错误。:-@FallenReapper如果在安装过程中遇到任何问题,请参阅,以及可接受的解决方案。这可能就是问题所在。我可能没有安装驱动程序