-1

首先,我在 Stack Overflow 上的很多地方都看到过这种情况,但我仍然无法让这个错误消失。有关此特定问题的一些信息如下:

下面的代码是我用来创建表的 MySQL 代码(我想在其中插入特定记录):

CREATE  TABLE IF NOT EXISTS `energymeter`.`Node` (
  `node_id` INT NOT NULL AUTO_INCREMENT ,
  `node_name` VARCHAR(7) NOT NULL ,
  PRIMARY KEY (`node_id`) ,
  UNIQUE INDEX `node_name_UNIQUE` (`node_name` ASC) )
ENGINE = InnoDB;

下面的代码似乎是失败的地方(导致线程标题中给出的错误):

$node_name_value = $line_of_text[2]; // In this example, the value would be 'MyDataValue'
$insert_demand_record = $conn->prepare("INSERT INTO Demand (date, time, trading_period, demand_value, Node_node_id) VALUES (STR_TO_DATE('$date', '%d %M %Y'), STR_TO_DATE('$time', '%k:%i:%s'), $trading_period, $demand_value, (SELECT Node.node_id FROM Node WHERE Node.node_name = $node_name_value))");
$insert_demand_record->execute();

编辑:经过进一步测试,更改上面的代码不起作用,但是如果我更改下面的代码(更改 '$node_name_value 值),我会看到浏览器中的值发生变化(例如,如果我将 $node_name_value 设置为'SomeRandomValue',错误类似于'未知列'SomeRandomValue'......

//Ignoring items of same name that already exist (since there is a UNIQUE constraint
//on the 'node_name' column.
$insert_stmt = $conn->prepare('INSERT IGNORE INTO Node(node_name) VALUES(:node_value)');

//Bind the node name with the query
$node_name_value = $line_of_text[2];
$insert_stmt->bindParam(':node_value', $node_name_value);

//Execute PDO insert statement
$insert_stmt->execute();

如果有人可以帮助我解决这个问题,那将不胜感激!

4

1 回答 1

-1

以下代码设法使事情对我有用......

$insert_demand_record = $conn->prepare("INSERT INTO Demand (date, time, trading_period, demand_value, Node_node_id) VALUES (STR_TO_DATE('$date', '%d %M %Y'), STR_TO_DATE('$time', '%k:%i:%s'), $trading_period, $demand_value, (SELECT Node.node_id FROM Node WHERE Node.node_name = :node_name_value))");

$insert_demand_record->bindValue(':node_name_value', $node_name_value, PDO::PARAM_STR);
$insert_demand_record->execute();

感谢用户“Burhan Khalid”建议编辑 - 现在将使用准备好的语句更多...

于 2013-10-28T11:49:19.917 回答