Does mysqli_stmt::result_metadata return false on insert, update, delete queries?
I'm a bit not understanding - on update, insert, delete queries result_metadata returns false? Because:
$meta = $stmt开发者_如何学编程->result_metadata();
if($meta === false){
throw new Exception(...));
}
throws the exception when i try to run update, insert or delete query. But it should be false only on error. (from php manual)
The function is intended to return data about the data you've just made a query about (metadata!). The action of inserting rows, updating rows, and deleting rows usually doesn't actually return a result set.
(At least not in MySQL. In certain other databases, like Postgres, there's the RETURNING
clause...)
From the comments on the mysqli_stmt_result_metadata
manual page:
If result_metadata() returns false but error/errno/sqlstate tells you no error occurred, this means your query is one that does not produce a result set, i.e. an INSERT/UPDATE/DELETE query instead of a SELECT query.
This is stated in the documentation where it says "If a statement passed to mysqli_prepare() is one that produces a result set, mysqli_stmt_result_metadata() returns the result object", but it might not be clear to everyone what this entails exactly.
精彩评论