致命错误:类mysqli_stmt的对象无法转换为字符串

时间:2016-06-15 10:44:33

标签: php string

我是PHP的新手,所以这个问题一定很愚蠢。我已多次阅读该代码,但我无法找到有关这些错误的任何差异:

  

PHP Catchable致命错误:无法将类mysqli_stmt的对象转换为第80行的mkt_salva_prodotti.php中的字符串

     

PHP Catchable致命错误:第89行的mkt_salva_prodotti.php中无法将类mysqli_stmt的对象转换为字符串

以下是代码:

<?php

require "common/header.php" ;

$token=getPar_empty("token",$_GET);
if ($token=="")$token=getPar_empty("token",getallheaders());
auth($token);

$nome_it=getPar_empty("nome_it",$_POST,null);
$nome_en=getPar_empty("nome_en",$_POST,null);

$descrizione_it=getPar_empty("descrizione_it",$_POST,null);
$descrizione_en=getPar_empty("descrizione_en",$_POST,null);
$imm_url=getPar_empty("imm_url",$_POST,null);
$lat=getPar_empty("lat",$_POST,null);
$lng=getPar_empty("lng",$_POST,null);
$posto=getPar_empty("posto",$_POST,null);
$id=getPar_empty("id",$_POST,null);
$lingua=getPar_empty("lingua",$_POST,null);
$id_produttore=getPar_empty("id_produttore",$_POST,null);
$quantita_min=(integer)getPar_empty("quantita_min",$_POST,0);
$quantita_max=(integer)getPar_empty("quantita_max",$_POST,0);
$quantita_disp=(integer)getPar_empty("quantita_disp",$_POST,0);
$costo=(float)getPar_empty("costo",$_POST,0);
$tasse=(float)getPar_empty("tasse",$_POST,0);
$completo_it=(integer)getPar_empty("completo_it",$_POST,1);
$completo_en=(integer)getPar_empty("completo_en",$_POST,1);

$lat2=getPar_empty("lat2",$_POST,null);
$lng2=getPar_empty("lng2",$_POST,null);
$posto2=getPar_empty("posto2",$_POST,null);

$lat3=getPar_empty("lat3",$_POST,null);
$lng3=getPar_empty("lng3",$_POST,null);
$posto3=getPar_empty("posto3",$_POST,null);


$user=getPar_empty("user",$_POST);
$system=getPar_empty("system",$_POST);

$out=array("res"=>"0");
$db->autocommit(FALSE);


if (isset($_POST['del_ingr']) && $_POST['del_ingr']==1){
    $stmt=$db->prepare("UPDATE prodotti set online=0,data_update=now(),sistema=?, utente=? where id=?");
    if (!$stmt) {
        log_msg($db->error);
        $db->rollback ();
        die();
    }

    $stmt->bind_param("sss",$system,$user,$id);
    $stmt->execute();
    $db->commit();
    $db->close();

    $out["res"]="1";
    echo json_encode($out);
    die();
}

if (!$id) $id=get_a_slug($nome_it.'-'.$nome_en."_".bin2hex(openssl_random_pseudo_bytes(3)));
if (!$id) die();


$stmt=$db->prepare("UPDATE prodotti set nome=?,descrizione=?,completo=? where id=? and lingua='it'");
if (!$stmt) {
    log_msg($db->error);
    $db->rollback ();
    die();
}

$stmt->bind_param("ssis",
$nome_it,$descrizione_it,$completo_it,$id);
if (test_execute($stmt->execute()) ) $out['it']=1;

if ($db->affected_rows==0){
    $stmt=$db->prepare("INSERT IGNORE INTO prodotti (nome,descrizione,id,lingua,completo) VALUES (?,?,?,'it',?)");

    if (!$stmt) {
        log_msg($db->error);
        $db->rollback ();
        die();
    }

    $stmt->bind_param("ssis",
    $nome_it,$descrizione_it,$completo_it,$id);
    if (test_execute($stmt->execute())) $out['it']=1;
}

$stmt=$db->prepare("UPDATE prodotti set nome=? ,descrizione=?,completo=? where id=? and lingua='en'");
if (!$stmt) {
    log_msg($db->error);
    die();
}

$stmt->bind_param("ssis",
$nome_en,$descrizione_en,$completo_en,$id);
if (test_execute($stmt->execute()) ) $out['en']=1;

if ($db->affected_rows==0){
    $stmt=$db->prepare("INSERT IGNORE INTO prodotti (nome,descrizione,id,lingua,completo) VALUES (?,?,?,'en',?)");
    if (!$stmt) {

        log_msg($db->error);
        $db->rollback ();
        die();
    }

    $stmt->bind_param("ssis",
    $nome_en,$descrizione_en,$completo_en,$id);
    if ($stmt->execute()) $out['en']=1;
}


if ($imm_url && $imm_url!=IMAGE_PLACEHOLDER && file_exists(ROOT_DIR.$imm_url)){
    $stmt=$db->prepare("select imm_url from prodotti where id=?  LIMIT 0,1");
    if (!$stmt) {

        log_msg($db->error);
        $db->rollback ();
        die();
    }
    $stmt->bind_param("s", $id);
    $stmt->execute();
    $row=fetchArray($stmt);
    $stmt->close();

    if (count($row)==1){
        offline_s3_archivio($row[0]["imm_url"],$system,$user);
    }



    $array=null;
    $id_s3=crea_s3_archivio_immagini(ROOT_DIR.$imm_url,$system,$user,$array,false);
    if ($id_s3==0) {


        $db->rollback ();
        die();
    }

    $stmt=$db->prepare("UPDATE prodotti set imm_url=?  where id=?");
    if (!$stmt) {
        log_msg($db->error);
        $db->rollback ();
        die();
    }

    $stmt->bind_param("ss", $id_s3,$id);
    if ($stmt->execute()) {
        $out['file']=$array["big"];
        $out['archive']=$id_s3;
    }

}


$posti=array();
if ($lat && $lng && $posto){
    array_push($posti,array("lat"=>$lat,"lng"=>$lng,"posto"=>$posto));
}
if ($lat2 && $lng2 && $posto2){
    array_push($posti,array("lat"=>$lat2,"lng"=>$lng2,"posto"=>$posto2));
}
if ($lat3 && $lng3 && $posto3){
    array_push($posti,array("lat"=>$lat3,"lng"=>$lng3,"posto"=>$posto3));
}

if ($posti && count($posti)>0){
    $to=json_encode($posti);
    $stmt=$db->prepare("UPDATE prodotti set mappa=?  where id=?");
    if (!$stmt) {
        log_msg($db->error);
        $db->rollback ();
        die();
    }

    $stmt->bind_param("ss", $to,$id);
    if ($stmt->execute()) $out['mappa']=$to;

}


$stmt=$db->prepare("UPDATE prodotti set quantita_min=?,quantita_max=?,quantita_disp=?,costo=?,tasse=?  where id=?");
if (!$stmt) {
    log_msg($db->error);
    $db->rollback ();
    die();
}

$stmt->bind_param("iiidds", $quantita_min,$quantita_max,$quantita_disp,$costo,$tasse,$id);
if ($stmt->execute()) $out['dati']=1;


if (isset($out['en']) && isset($out['it']) && $out['en']==1 && $out['it']==1) {
    $out["res"]="1";
    $out["id"]=$id;
}


$stmt=$db->prepare("UPDATE prodotti set data_update=now(),sistema=?, utente=? where id=?");
    if (!$stmt) {
        log_msg($db->error);
        $db->rollback ();
        die();
    }

$stmt->bind_param("sss", $system,$user,$id);
$stmt->execute();
$stmt->close();



$db->commit();
$db->close();


echo json_encode($out);

?>

请帮助我。 谢谢!

2 个答案:

答案 0 :(得分:0)

好的,我解决了这个问题,但是我无法解决这个关于&#39; id&#39;变量:

截断错误的DOUBLE值:&#39; 1464261692_5f2d6cd474&#39;

<?php

require "common/header.php" ;

$token=getPar_empty("token",$_GET);
if ($token=="")$token=getPar_empty("token",getallheaders());
auth($token);

$nome_it=getPar_empty("nome_it",$_POST,null);
$nome_en=getPar_empty("nome_en",$_POST,null);

$descrizione_it=getPar_empty("descrizione_it",$_POST,null);
$descrizione_en=getPar_empty("descrizione_en",$_POST,null);
$imm_url=getPar_empty("imm_url",$_POST,null);
$id=getPar_empty("id",$_POST,null);
$lingua=getPar_empty("lingua",$_POST,null);
$id_produttore=getPar_empty("id_produttore",$_POST,null);
$quantita_min=(integer)getPar_empty("quantita_min",$_POST,0);
$quantita_max=(integer)getPar_empty("quantita_max",$_POST,0);
$quantita_disp=(integer)getPar_empty("quantita_disp",$_POST,0);
$costo=(float)getPar_empty("costo",$_POST,0);
$tasse=(float)getPar_empty("tasse",$_POST,0);
$completo_it=(integer)getPar_empty("completo_it",$_POST,1);
$completo_en=(integer)getPar_empty("completo_en",$_POST,1);

$lat=getPar_empty("lat",$_POST,null);
$lng=getPar_empty("lng",$_POST,null);
$posto=getPar_empty("posto",$_POST,null);


$user=getPar_empty("user",$_POST);
$system=getPar_empty("system",$_POST);

$out=array("res"=>"0");
$db->autocommit(FALSE);


if (isset($_POST['del_ingr']) && $_POST['del_ingr']==1){
    $stmt=$db->prepare("UPDATE prodotti set online=0,data_update=now(),sistema=?, utente=? where id=?");
    if (!$stmt) {
        log_msg($db->error);
        $db->rollback ();
        die();
    }

    $stmt->bind_param("sss",$system,$user,$id);
    $stmt->execute();
    $db->commit();
    $db->close();

    $out["res"]="1";
    echo json_encode($out);
    die();
}

$stmt=$db->prepare("UPDATE prodotti set nome=?,descrizione=?,completo=?,quantita_min=?,quantita_max=?,quantita_disp=?,costo=?,tasse=? where id=? and lingua='it'");
if (!$stmt) {

    log_msg($db->error);
    $db->rollback ();
    die();
}

$stmt->bind_param("ssisiiidd",
$nome_it,$descrizione_it,$completo_it,$id,$quantita_min,$quantita_max,$quantita_disp,$costo,$tasse);
if (test_execute($stmt->execute()) ) $out['it']=1;

if ($db->affected_rows==0){

    $stmt=$db->prepare("INSERT IGNORE INTO prodotti (nome,descrizione,id,lingua,completo,quantita_min,quantita_max,quantita_disp,costo,tasse) VALUES (?,?,?,'it',?,?,?,?,?,?)");
$id=generateid();
    if (!$stmt) {

        log_msg($db->error);
        $db->rollback ();
        die();
    }

    $stmt->bind_param("ssisiiidd",
    $nome_it,$descrizione_it,$completo_it,$id,$quantita_min,$quantita_max,$quantita_disp,$costo,$tasse);
    if (test_execute($stmt->execute())) $out['it']=1;
}

$stmt=$db->prepare("UPDATE prodotti set nome=?,descrizione=?,completo=?,quantita_min=?,quantita_max=?,quantita_disp=?,costo=?,tasse=? where id=? and lingua='en'");
if (!$stmt) {
    log_msg($db->error);
    $db->rollback ();
    die();
}

$stmt->bind_param("ssisiiidd",
$nome_en,$descrizione_en,$completo_en,$id,$quantita_min,$quantita_max,$quantita_disp,$costo,$tasse);
if (test_execute($stmt->execute()) ) $out['en']=1;

if ($db->affected_rows==0){
    $stmt=$db->prepare("INSERT IGNORE INTO prodotti (nome,descrizione,id,lingua,completo,quantita_min,quantita_max,quantita_disp,costo,tasse) VALUES (?,?,?,'en',?,?,?,?,?,?)");
$id=generateid();
    if (!$stmt) {
        log_msg($db->error);
        $db->rollback ();
        die();
    }

    $stmt->bind_param("ssisiiidd",
    $nome_en,$descrizione_en,$completo_en,$id,$quantita_min,$quantita_max,$quantita_disp,$costo,$tasse);
    if (test_execute($stmt->execute())) $out['en']=1;
}


if ($imm_url && $imm_url!=IMAGE_PLACEHOLDER && file_exists(ROOT_DIR.$imm_url)){
    $stmt=$db->prepare("select imm_url from prodotti where id=?  LIMIT 0,1");
    if (!$stmt) {

        log_msg($db->error);
        $db->rollback ();
        die();
    }
    $stmt->bind_param("s", $id);
    $stmt->execute();
    $row=fetchArray($stmt);
    $stmt->close();

    if (count($row)==1){
        offline_s3_archivio($row[0]["imm_url"],$system,$user);
    }



    $array=null;
    $id_s3=crea_s3_archivio_immagini(ROOT_DIR.$imm_url,$system,$user,$array,false);
    if ($id_s3==0) {


        $db->rollback ();
        die();
    }

    $stmt=$db->prepare("UPDATE prodotti set imm_url=?  where id=?");
    if (!$stmt) {
        log_msg($db->error);
        $db->rollback ();
        die();
    }

    $stmt->bind_param("ss", $id_s3,$id);
    if ($stmt->execute()) {
        $out['file']=$array["big"];
        $out['archive']=$id_s3;
    }

}


$posti=array();
if ($lat && $lng && $posto){
    array_push($posti,array("lat"=>$lat,"lng"=>$lng,"posto"=>$posto));
}

if ($posti && count($posti)>0){
    $to=json_encode($posti);
    $stmt=$db->prepare("UPDATE prodotti set mappa=?  where id=?");
    if (!$stmt) {
        log_msg($db->error);
        $db->rollback ();
        die();
    }

    $stmt->bind_param("ss", $to,$id);
    if ($stmt->execute()) $out['mappa']=$to;

}


if (isset($out['en']) && isset($out['it']) && $out['en']==1 && $out['it']==1) {
    $out["res"]="1";
    $out["id"]=$id;
}


$stmt=$db->prepare("UPDATE prodotti set data_update=now(),sistema=?, utente=? where id=?");
    if (!$stmt) {
        log_msg($db->error);
        $db->rollback ();
        die();
    }

$stmt->bind_param("sss", $system,$user,$id);
$stmt->execute();
$stmt->close();



$db->commit();
$db->close();


echo json_encode($out);

?>

答案 1 :(得分:0)

确定!问题解决了。我要改变变量顺序:

$stmt=$db->prepare("INSERT IGNORE INTO prodotti (nome,descrizione,id,lingua,completo,quantita_min,quantita_max,quantita_disp,costo,tasse) VALUES (?,?,?,'it',?,?,?,?,?,?)");
    $id=generateid();
        if (!$stmt) {

            log_msg($db->error);
            $db->rollback ();
            die();
        }

        $stmt->bind_param("ssisiiidd",
        $nome_it,$descrizione_it,$id,$completo_it,$quantita_min,$quantita_max,$quantita_disp,$costo,$tasse);
        if (test_execute($stmt->execute())) $out['it']=1;

而不是:

$stmt=$db->prepare("INSERT IGNORE INTO prodotti (nome,descrizione,id,lingua,completo,quantita_min,quantita_max,quantita_disp,costo,tasse) VALUES (?,?,?,'it',?,?,?,?,?,?)");
$id=generateid();
    if (!$stmt) {

        log_msg($db->error);
        $db->rollback ();
        die();
    }

    $stmt->bind_param("sssiiiidd",
    $nome_it,$descrizione_it,$id,$completo_it,$quantita_min,$quantita_max,$quantita_disp,$costo,$tasse);
    if (test_execute($stmt->execute())) $out['it']=1;