Php 选择interbase并插入mysql仅显示1条记录
我试图从另一台使用interbase的机器上获取数据。我使用PDO将interbase值插入Mysql。但只有一条记录插入到mysql。为什么?Php 选择interbase并插入mysql仅显示1条记录,php,mysql,pdo,insert,interbase,Php,Mysql,Pdo,Insert,Interbase,我试图从另一台使用interbase的机器上获取数据。我使用PDO将interbase值插入Mysql。但只有一条记录插入到mysql。为什么? $stmt = "SELECT FIRST 10 TRIM(LINE_NAME) as LINE_NAME, TRIM(MODEL_NAME) as MODEL_NAME, TRIM(PROD_NO) as PROD_NO, TRIM(LOT_SIZE_IN) as LOT_SIZE_IN,TRIM(ST
$stmt = "SELECT FIRST 10 TRIM(LINE_NAME) as LINE_NAME, TRIM(MODEL_NAME) as MODEL_NAME, TRIM(PROD_NO) as PROD_NO,
TRIM(LOT_SIZE_IN) as LOT_SIZE_IN,TRIM(START_SERIAL) as START_SERIAL,
TRIM(SERIAL_NO_LOW) as SERIAL_NO_LOW, TRIM(SERIAL_NO_UP) as SERIAL_NO_UP, TRIM(PROD_DATE) as PROD_DATE
FROM DOC_TO";
$sth = ibase_query($dbh, $stmt);
// CREATE AN ARRAY OF OBJECTS
if($sth === FALSE) {
die(ibase_errmsg()); // TODO: better error handling
}
while ($row = ibase_fetch_object($sth)) {
$newvalues[] = $row;
}
$dbh = new PDO('mysql:host=localhost;dbname=qdbase', 'root', 'JeinQA123');
$sql="TRUNCATE TABLE `schedule`";
$stmt = $dbh->query($sql);
if($stmt){echo "connected";}
else{echo "failed";}
// PREPARE A QUERY
$qry2 = "INSERT INTO schedule (line,model,lotno,qty,serial,seriallow,serialup,date )
VALUES (:LINE_NAME, :MODEL_NAME, :PROD_NO,:LOT_SIZE_IN,:START_SERIAL,:SERIAL_NO_LOW,:SERIAL_NO_UP,:PROD_DATE)";
$stmt = $dbh->prepare($qry2);
// USE THE ARRAY OF OBJECTS
foreach ($newvalues as $obj)
{
// BIND THE OBJECT PROPERTIES INTO THE QUERY
$stmt->bindParam('LINE_NAME', $obj->LINE_NAME);
$stmt->bindParam('MODEL_NAME', $obj->MODEL_NAME);
$stmt->bindParam('PROD_NO', $obj->PROD_NO);
$stmt->bindParam('LOT_SIZE_IN', $obj->LOT_SIZE_IN);
$stmt->bindParam('START_SERIAL', $obj->START_SERIAL);
$stmt->bindParam('SERIAL_NO_LOW', $obj->SERIAL_NO_LOW);
$stmt->bindParam('SERIAL_NO_UP', $obj->SERIAL_NO_UP);
$stmt->bindParam('PROD_DATE', $obj->PROD_DATE);
/*I try to add this inside foreach*/
try
{
$stmt->execute();
}
// IF THERE IS AN EXCEPTION THROWN BY PDO
catch (PDOException $exc)
{
// IF THE EXCEPTION NUMBER IS NOT "DUPLICATE UNIQUE"
if ($exc->errorInfo[1] != 1062)
{
$msg = "FAIL: $qry " . PHP_EOL . $exc->getmessage();
trigger_error($msg, E_USER_ERROR);
}
}
}
试试下面的方法
// make sure PDO is set to throw exceptions
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $dbh->prepare($qry2);
foreach ($newvalues as $obj) {
try {
$stmt->execute(array(
':LINE_NAME' => $obj->LINE_NAME,
':MODEL_NAME' => $obj->MODEL_NAME,
':PROD_NO' => $obj->PROD_NO,
':LOT_SIZE_IN' => $obj->LOT_SIZE_IN,
':START_SERIAL' => $obj->START_SERIAL,
':SERIAL_NO_LOW' => $obj->SERIAL_NO_LOW,
':SERIAL_NO_UP' => $obj->SERIAL_NO_UP,
':PROD_DATE' => $obj->PROD_DATE
));
} catch (PDOException $e) {
$errorInfo = $stmt->errorInfo();
if ($errorInfo[1] != 1062) {
throw $e;
}
}
}
我不能完全确定1062
是要检查的错误代码。在过去,我使用了1586
来检测唯一的约束冲突。反复试验将发现要检查的正确值
您还使用了
$stmt->errorInfo
作为属性,而不是方法$stmt->errorInfo()
显示错误PHP解析错误:语法错误,意外'[',预期为'”
@nunuu您显然使用的是一个非常旧的PHP版本。速记数组语法出现在5.4中。我已经更新了我的答案,以支持旧的syntaxI。请尝试执行,查看我更新的问题。更改更新的答案后仍然会出现相同的错误。@nuu是否设置了PDO以引发异常(请参阅上面的第一行代码)?尝试在不使用Try
语句和catch
块的情况下运行它。还要确保在php.ini中设置了error\u reporting=E\u ALL
和display\u errors=On
file@nunu我假设从“接受”开始,它就工作了。恭喜:)等等,现在你想忽略唯一的约束冲突吗为什么一开始你没有提到这一点?看起来你还没有设置PDO来实际抛出异常,所以在发生错误时不会有任何异常可以捕获。请参阅下面我的更新答案