Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.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 使用pdo准备语句将数据插入数据库_Php_Pdo - Fatal编程技术网

Php 使用pdo准备语句将数据插入数据库

Php 使用pdo准备语句将数据插入数据库,php,pdo,Php,Pdo,使用pdo准备状态将数据插入数据库,对我不起作用: 我使用此功能: public function get_number_of_matches(){ $stmt = $this->pdo->prepare("INSERT INTO `words`( `word_name`, `word_count`, `search_id`) VALUES (:word, :count,:searchID)"); $stmt->bindParam(':word'

使用pdo准备状态将数据插入数据库,对我不起作用:

我使用此功能:

    public function get_number_of_matches(){
     $stmt = $this->pdo->prepare("INSERT INTO `words`( `word_name`, `word_count`, `search_id`) VALUES (:word, :count,:searchID)");
       $stmt->bindParam(':word', $word);
       $stmt->bindParam(':count', $count);
       $stmt->bindParam(':searchID', $search_id);
   for($i=0;$i<count($this->words);$i++){
     if(preg_match_all('/'.$this->words[$i].'/i', $this->text,$matches)){
       $count=count($matches[0]);
       $word=$this->words[$i];
        $search_id=1;
       $stmt->execute();
         break;
    }   

   }
    return 0;
}
更新 另请参见此处:

我对不同的查询执行相同的操作。但是当我尝试将对象属性放入变量中时,我得到一个错误:

$tweet=$tweet->tweet; $user=$tweet->tweeter\u name; $link=$tweet->link

这些变量进入查询:

       $pdo=  DBConnection::connect();
    $stmt = $pdo->prepare("INSERT INTO `tweets`( `tweet`, `tweeter_name`, `link`, `date`, `search_id`) VALUES (:tweet, :tweeter_name, :link, :date, :search_id)");
      $stmt->bindParam(':tweet', $tweet);
       $stmt->bindParam(':tweeter_name', $user);
       $stmt->bindParam(':link', $link);
       $stmt->bindParam(':date', $date);
       $stmt->bindParam(':search_id', $search_id);
我会遇到如下错误:

    $tweet= "111111"; // $tweet->tweet ;
        $user= "22222222"; // $tweet->tweeter_name;
        $link= "3333333";  // $tweet->link;
        $date= "444444";
注意:试图在第36行的C:\xampp\htdocs\Twitter\demo.php中获取非对象的属性

注意:试图在第37行的C:\xampp\htdocs\Twitter\demo.php中获取非对象的属性

注意:试图在第38行的C:\xampp\htdocs\Twitter\demo.php中获取非对象的属性

我可以打印属性..但是当将它们分配给那些绑定的变量..上面的错误就会出现

我也明白这一点:

致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[23000]:完整性约束冲突:C:\xampp\htdocs\Twitter\demo.php中的1048列“tweeter\u name”不能为null。40堆栈跟踪:#0 C:\xampp\htdocs\Twitter\demo.php(40):PDOStatement->execute()#1{main}在C:\xampp\htdocs\Twitter\demo.php的第40行抛出

我改为这样检查:

    $tweet= "111111"; // $tweet->tweet ;
        $user= "22222222"; // $tweet->tweeter_name;
        $link= "3333333";  // $tweet->link;
        $date= "444444";
它工作了…出于某种原因它讨厌那些对象属性

这应作为输入:

RT@OrganicLiveFood:科学家警告美国环保署关注孟山都的转基因作物的失败和危险,建议37,标签转基因作物是的37 双乳香 2012年11月19日星期一20:40:55+0000 RT@OrganicLiveFood:科学家警告美国环保署关注孟山都的转基因作物的失败和危险,建议37,标签转基因作物是的37


但它不是

添加
self::$connection->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常)在连接之后


这将确保PDO将在每个错误上抛出PDO异常,使它们非常容易看到。然后,错误将准确地列出错误所在。

检查
$stmt->execute()
中的返回值,如果出现问题,它将返回
false
,您应该检查
$stmt->errorInfo()
以了解详细信息

或者使用@Madara Uchiha建议的ERRMODE_异常,但是如果您还没有在应用程序中处理异常,那么这可能很难适应


回复:你的更新

每次调用时,都应该检查
PDO::prepare()
PDOStatement::execute()
中的错误状态。关于“尝试获取非对象的属性”的错误可能意味着
$stmt
实际上是布尔值
false
,而不是有效的PDOStatement对象。对
$stmt->bindParam()
的调用失败,因为
false
不是对象,所以它不能有
bindParam()
方法

在我看来,通过值传递参数要比通过引用绑定变量容易得多。以下是错误检查和参数值检查的示例:

$pdo =  DBConnection::connect();

$sql = "INSERT INTO `tweets`( `tweet`, `tweeter_name`, `link`, `date`, `search_id`) 
    VALUES (:tweet, :tweeter_name, :link, :date, :search_id)";

if (($stmt = $pdo->prepare($sql)) === false) {
    die(print_r($pdo->errorInfo(), true));
}

$params = array(
    ':tweet'        => $tweet,
    ':tweeter_name' => $user,
    ':link'         => $link,
    ':date'         => $date,
    ':search_id'    => $search_id
);

if (($status = $stmt->execute($params) === false) {
    die(print_r($stmt->errorInfo(), true));
}

您在异常中看到的错误“列'Tweeer\u name'不能为null'”表示您的
Tweeer\u name
列被声明为非null,但您的$user变量在绑定到:Tweeer\u name参数时没有值。

您是否尝试初始化您首先尝试绑定的变量?例如,
$word=0,因此存在PDO绑定到的引用。PDO异常很少(语法错误等)。在INSERT查询中不应出现异常。如果您真的想小心,请在进入生产时注释PDO::ERRMODE_异常行。