我对mySQL比较陌生。出于某种原因,我在INSERT ON DUPLICATE KEY UPDATE命令中收到错误。这就是它的样子:
print "Writing status to file \n";
$mysqliNode = new mysqli('blah.net', 'us', 'pw', "CATV_Mon");
$stmtNode = $mysqliNode->prepare("INSERT INTO CATV_Mon.nodeDetail (nodID, pctRedYellow, count)
VALUES (?,?,?)
ON DUPLICATE KEY UPDATE pctRedYellow = VALUES(percentRedYellow)
,count = VALUES(count)
");
$index = "ABCF";
$tempCount = 5000;
$node_percent_down = 55;
$stmtNode->bind_param("sss",$index,$node_percent_down,$tempCount);
if(!$stmtNode->execute) {
$tempErr = "Error getting Node $nod info and put in table: " . $stmtNode->error;
printf($tempErr . "\n"); //show mysql execute error if exists
$err->logThis($tempErr);
printf ("will die on purpose now \n");
die();
} //if stmtNode didn't execute ok
当我运行它时,我看到(它没有显示错误消息):
Writing status to file
Error getting Node WILL info and put in table:
will die on purpose now
我尝试使用MySQL Workbench中的语句:
INSERT INTO CATV_Mon.nodeDetail (nodID, pctRedYellow, count)
VALUES ("ABCE",30,5000)
ON DUPLICATE KEY UPDATE pctRedYellow = VALUES(pctRedYellow)
,count = VALUES(count) ;
这样可行,并说1行受影响,我在表格中看到了它。当我更改要更新的值并在工作台中运行它时,它会更新已更改的内容并在表中看起来很好。
为什么它在php脚本中失败了?我尝试更改我尝试插入的nodeID,但同样失败。
表结构是: nodID varchar(20)主键 pctRedYellow int(5) count int(8)
我在网上搜索,看起来我正在做我应该做的事情。 insert on duplicate key update。我以为我需要在我的声明中使用WHERE,但它在工作台中工作,并且链接的语法看起来很好。
答案 0 :(得分:0)
我找到了这个,并修复了它。 bind param doesn't work
$ stmtNode-> bind_param(' sii',$ index,$ node_percent_down,$ tempCount);