我有一个独特的专栏。根据我的理解,当您尝试将某些数据插入到违反其唯一性的列中时,查询将停止处理。我想做的只是捕获错误并继续其余的行。你会如何使用PHP和MySQL以最有效的方式做到这一点?
这里有一个简短的例子 http://pastie.org/1357001
我真正想知道的是,如果发生错误,循环会被破坏吗?
答案 0 :(得分:2)
我和这个人在一起。违反约束不应该在PHP中导致异常。您只需测试mysqli_stmt::execute的返回值,或者您正在使用的任何值,并处理已发生的任何错误:
$mysqli = new mysqli('host', 'user', 'password', 'db');
// Prepare an INSERT;
$stmt = $mysqli->prepare('INSERT INTO mytable (id, data) VALUES (?, ?)');
$data = 'Some data';
// Insert 3 rows.
for ( $id = 1; $id <= 3 ; $id++ ) {
// Attempt to insert each row twice.
for ( $test = 1; $test <= 2; $test++ ) {
// Bind the ID and data.
$stmt->bind_param('is', $id, $data);
// Execute the statement.
if ( $stmt->execute() ) {
// No error.
echo "Inserted row ID $id\n";
} else {
// An error, but no exception.
printf(
"Error %d inserting row ID %d: %s\n",
$stmt->errno,
$id,
$stmt->error
);
}
}
}
打印:
Inserted row ID 1
Error 1062 inserting row ID 1: Duplicate entry '1' for key 'PRIMARY'
Inserted row ID 2
Error 1062 inserting row ID 2: Duplicate entry '2' for key 'PRIMARY'
Inserted row ID 3
Error 1062 inserting row ID 3: Duplicate entry '3' for key 'PRIMARY'
答案 1 :(得分:1)
你应该能够发现这个错误:
try {
// execute SQL query for one record
} catch(Exception $e) {
// handle error here
}
答案 2 :(得分:1)
foreach($somethings as $something)
{
try
{
//mysql_query
}
catch(Exception $e)
{
$failed[] = $e;
continue;
}
//process anything else.
}
例外是要走的路。