【问题标题】:stmt->execute() (Array to string conversion error)stmt->execute() (数组到字符串转换错误)
【发布时间】:2015-04-30 05:25:48
【问题描述】:

团队,我正在尝试在 mysql 数据库中插入一个寄存器,在使用 mysqli 时,我在 execute() 上遇到错误

注意:C:\xampp\htdocs\InsereSite.php 中的数组到字符串的转换 在第 19 行调用堆栈执行 () ..\InsereSite.php:19

我不确定它为什么要进行这种转换,但无论如何,这里是代码。请尽可能告诉我更多数据。

<?php
function InsertSiteDb($site_novo){

    if(!isset($_POST['sites'])) {
        echo " Voce precisa estar logado para acessar essa pagina";
        header('Location:sellsite_login.html');

    }else{

        $mysqli = new mysqli('localhost', 'root', '', 'sellsites');


        $query = "INSERT INTO pages (url,file,public,price) VALUES (?,?,0,0)";
        $stmt = $mysqli->prepare($query);

        $stmt->bind_param('ss',$_SESSION['url'],$_SESSION['nomesite']);
        //$stmt->execute();

        $stmt->close();


    }


}
?>

这里是调用 InsertSiteDb 的地方:

<?php

    session_start();
    $sites = $_POST['sites']; //o que foi digitado no form será postado
    var_dump($sites);
    $sites = explode(";",$sites);


foreach ($sites as $site) {
        $recebesite_html[] = file_get_contents($site); 
}                                                   

$contador = 0;

 foreach ($recebesite_html as $site_novo){
    $pos = strpos($site_novo, "<title>"); 
    $pos_final = strpos($site_novo,"</title>");
    echo $pos.$pos_final;

    $pos += 7; 
    $tamanho = $pos_final -$pos;

    $nome=substr($site_novo,$pos,$tamanho);
    $_SESSION['nomesite'] = $nome;
    $_SESSION['url'] = $sites;
    $retorno = file_put_contents($nome.".html",$site_novo);
    echo $retorno;
    var_dump($site);
 }

include ("InsereSite.php");
$registro_site=InsertSiteDb($_SESSION['nomesite']);


?>

【问题讨论】:

  • 请用注释标记第 19 行
  • 工作。没有那条线,它真的插入到了 mysql 中。谢谢你的帮助,但是你能告诉我为什么它不需要在这里执行吗?这是 php 文档中描述的内容:php.net/manual/en/mysqli-stmt.execute.php
  • 它应该需要执行调用,正如我所说的,请在第 19 行标记注释
  • if(!$stmt-&gt;execute()){trigger_error("there was an error....".$mysqli-&gt;error, E_USER_WARNING);} 替换$stmt-&gt;execute();,看看为什么会失败。还要确保你已经开始了会话。
  • $_SESSION['url']$_SESSION['nomesite'] 是字符串吗?

标签: php mysqli insert


【解决方案1】:

1) 来自 Fred-ii-

     if(!$stmt->execute()){
trigger_error("there was an error.:".$mysqli->error, E_USER_WARNING);
    }

2) 问题是$_SESSION['url']$_SESSION['nomesite'] 是一个数组而不是一个字符串。添加一个代码块ABOVE你的$query =调用状态:

if (is_array($_SESSION['url']) || is_array($_SESSION['nomesite'])){
print "Data is an array:<br>";
var_dump($_SESSION);
} 

错误“数组到字符串的转换”是因为这两个 $_SESSION 值之一是数组值,并且 PHP 试图将这些数组值适合bind_param 方法中定义的字符串。

更新:

查看更新后的代码视图,$sites 变量(后来在$_SESSION['url'] 中使用)显然是一个数组,因此请使用数组中的一个值或内爆数组或使用类似方法将其转换为一个字符串。

【讨论】:

  • 感谢大家的帮助。刚刚做了: $sites=implode(" ",$sites);它修复了错误。你的陈述是对的。我没有注意到。
  • 别担心,很高兴你把它修好了,@MarceloMoraes :)
  • 爱错误检查 ;-) 在开发时非常有用; 干杯 @Martin
  • 如果 OP 读取错误输出,那么很多关于 SO 的问题都可以解决,而且我看到(你的)关于 cmets 的好建议,如果我正在写一个答案,我认为它们应该被包括在内并提出更加突出。哈哈...我也讨厌在 cmets 中阅读 code
猜你喜欢
  • 2015-02-26
  • 2012-07-15
  • 2017-12-02
  • 2013-06-23
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
相关资源
最近更新 更多