When using the PHP mysqli extension for database operations, encountering errors during query execution is inevitable. This is especially true when using mysqli_stmt_execute() to execute prepared statements. Sometimes, the error message does not directly indicate the specific cause of the error, and this is where the mysqli::$errno property can help us pinpoint the issue.
mysqli::$errno is a property of the mysqli extension in PHP that represents the error code of the last MySQL operation. When an error occurs during the execution of mysqli_stmt_execute(), the error code can be retrieved through mysqli::$errno, helping developers quickly locate the problem.
mysqli::$errno is often used in conjunction with mysqli::$error, which provides a detailed error message, helping us better understand exceptions during MySQL database operations.
Common causes of errors when using mysqli_stmt_execute() to execute prepared statements include:
Syntax errors in the SQL statement.
Binding errors, such as binding mismatched data types.
Database connection issues.
Insufficient database access privileges.
These errors are sometimes indicated by a boolean value or mysqli::$error, but to pinpoint the exact issue, we can use mysqli::$errno to retrieve the error code.
We can check the return value of mysqli_stmt_execute() to determine if the execution was successful. If it returns false, it means the execution failed. At this point, we can use mysqli::$errno and mysqli::$error to get detailed error information.
<?php
// Create a database connection
$mysqli = new mysqli("localhost", "username", "password", "database");
<p>// Check if the connection was successful<br>
if ($mysqli->connect_error) {<br>
die("Connection failed: " . $mysqli->connect_error);<br>
}</p>
<p>// Prepare SQL statement<br>
$stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");</p>
<p>// Bind parameters<br>
$username = 'testuser';<br>
$email = '<a class="cursor-pointer" rel="noopener">testuser@m66.net</a>';<br>
$stmt->bind_param("ss", $username, $email);</p>
<p>// Execute statement<br>
if (!$stmt->execute()) {<br>
echo "Error Code: " . $stmt->errno . "<br>";<br>
echo "Error Message: " . $stmt->error . "<br>";<br>
} else {<br>
echo "Insertion successful!<br>";<br>
}</p>
<p>// Close statement and connection<br>
$stmt->close();<br>
$mysqli->close();<br>
?>
Database Connection: First, we create the database connection using new mysqli() and check if the connection was successful.
Prepare SQL Statement: We prepare an SQL insert statement using the prepare() method to insert user data.
Bind Parameters: We bind the insertion parameters using the bind_param() method to ensure the correct data types are used.
Execute Statement and Check for Errors: When executing the mysqli_stmt_execute() method, if it returns false, it indicates an error occurred. We can retrieve the error code using $stmt->errno and the error description using $stmt->error.
In the above code, if an error occurs, we output the error code and error message to help us quickly identify the problem.
Close Connection: Finally, we close the prepared statement and database connection.
The error codes retrieved through mysqli::$errno are standard MySQL error codes. Below are some common error codes:
1045: Access denied for user - Insufficient database access privileges.
1064: You have an error in your SQL syntax - SQL syntax error.
1062: Duplicate entry - Insertion of duplicate data, violating unique constraints.
2002: Can't connect to local MySQL server - Unable to connect to the MySQL server.
These error codes help us clarify the reasons for database operation failures.
By using the mysqli::$errno property, we can quickly obtain error codes in database operations. By combining the error message from mysqli::$error, we can more easily identify the root cause of the problem. When an error occurs with mysqli_stmt_execute(), ensure that you first check the return value and further investigate the issue using the error code. This approach improves development efficiency and reduces debugging time.