Php 使用pdo准备语句将数据插入数据库
使用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'
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_异常行。