Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.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 prepare语句失败,错误为:致命错误:对非对象调用成员函数bind_param()_Php_Mysql_Mysqli - Fatal编程技术网

Php MySQLi prepare语句失败,错误为:致命错误:对非对象调用成员函数bind_param()

Php MySQLi prepare语句失败,错误为:致命错误:对非对象调用成员函数bind_param(),php,mysql,mysqli,Php,Mysql,Mysqli,我更新了这个问题以进一步澄清 这是我第一次处理MySQLi插入。我一直使用MySQL并直接运行查询。显然,没有MySQLi那么安全 无论如何,我试图将两个变量传递到数据库中。由于某种原因,我事先准备好的声明没有起到任何作用 编辑:现在可以工作了www!!!!我在wayyyy中添加了更多错误检查。进行了一些研究,但在每个函数中添加了检查。这样我就可以找到与正确函数对应的错误代码。再次感谢你的帮助。如果没有你,我肯定不会这么做。下面列出的代码现在是工作代码 <?php error_report

我更新了这个问题以进一步澄清

这是我第一次处理MySQLi插入。我一直使用MySQL并直接运行查询。显然,没有MySQLi那么安全

无论如何,我试图将两个变量传递到数据库中。由于某种原因,我事先准备好的声明没有起到任何作用

编辑:现在可以工作了www!!!!我在wayyyy中添加了更多错误检查。进行了一些研究,但在每个函数中添加了检查。这样我就可以找到与正确函数对应的错误代码。再次感谢你的帮助。如果没有你,我肯定不会这么做。下面列出的代码现在是工作代码

<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
function InsertIPs($decimnal,$cidr)
{
    $mysqli = new mysqli("localhost","jeremysd_ips","","jeremysd_ips");
       if(mysqli_connect_errno())
       {
          echo "Connection Failed: " . mysqli_connect_errno();
          exit();
       }
            $stmt = $mysqli->prepare("INSERT INTO subnets VALUES ('',?,?,'1','','0','0','0','0','0', '', '0', '0', NULL)");
            if( false===$stmt ){
            die('prepare() failed: ' . htmlspecialchars($mysqli->error));
            }
            $rc = $stmt->bind_param('ii',$decimnal,$cidr);
            if( false===$rc ){
                        die('bind_param() failed: ' . htmlspecialchars($stmt->error));
                        }


            $rc=$stmt->execute();
            if( false===$rc ){
                        die('execute() failed: ' . htmlspecialchars($mysqli->error));
                        }
            printf("%d Row inserted.\n", $stmt->affected_rows);

            $stmt->close();

            $mysqli -> close();
}

$SUBNETS = array ("2915483648 | 18");

foreach($SUBNETS as $Ip)
{
                list($TempIP,$TempMask) = explode(' | ',$Ip);
        echo InsertIPs($TempIP,$TempMask);
}

?>

查看您的纯查询:

"INSERT INTO subnets
(id, subnet, mask,sectionId,description,vrfld,masterSubnetId,allowRequests,vlanId,showName,permissions,pingSubnet,isFolder,editDate)
VALUES
('',?,?,'1','','0','0','0','0','0', '{'3':'1','2':'2'}', '0', '0', NULL)"
有逗号的
'{'3':'1','2':'2'}'是什么?是否应该重新格式化以使MySQL查询不会阻塞它?这些值是否应按如下方式转义:

'{\'3\':\'1\',\'2\':\'2\'}'
$raw_query = "INSERT INTO subnets (id, subnet, mask, sectionId, description, vrfld, masterSubnetId, allowRequests, vlanId, showName, permissions, pingSubnet, isFolder, editDate)
VALUES ('',?,?,'1','','0','0','0','0','0',?, '0', '0', NULL)";
if($stmt = $mysqli -> prepare($raw_query))
{
    $stmt-> bind_param('ii',$decimnal,$cidr,$cidr,'{"3":"1","2":"2"}');
或者使用
,因为您现在似乎表示需要双引号

'{\"3\":\"1\",\"2\":\"2\"}'
因为单引号和逗号混在一起似乎有问题

或者另一种解决方案是将该值绑定到查询,如下所示:

'{\'3\':\'1\',\'2\':\'2\'}'
$raw_query = "INSERT INTO subnets (id, subnet, mask, sectionId, description, vrfld, masterSubnetId, allowRequests, vlanId, showName, permissions, pingSubnet, isFolder, editDate)
VALUES ('',?,?,'1','','0','0','0','0','0',?, '0', '0', NULL)";
if($stmt = $mysqli -> prepare($raw_query))
{
    $stmt-> bind_param('ii',$decimnal,$cidr,$cidr,'{"3":"1","2":"2"}');

错误消息是什么?上90%的PHP/MySQL查询不必检查其MySQL调用的返回状态,当他们这样做时,他们不会检查错误消息。如果您检查MySQL提供的错误消息,您可能已经知道这里出了什么问题。@Fred ii-最后一条评论不正确。这些变量很好,请仔细查看”因为它们需要在数据库中显示为:{“3”:“1”,“2”:“2”}”-下面是您的答案:使用
{“3\”:\“1\”,\“2\”}
它将显示为
{“3”:“1”,“2”:“2”}
在DB中。至少对我来说是这样。@Jimmy还有一个基本的编码真理是,在将概念和MySQL理论转换成新的东西之前,你至少应该以你所知道的方式测试它们。这意味着你似乎在试图形成一个查询,同时学习MySQLi。首先创建查询,使其工作。然后将其解构为MySQLi。