在生产环境中处理准备好的语句时出错
Error handling prepared statements in a production environment
在生产环境中,当使用准备好的语句并完成所有其他验证时,我是否需要对每个步骤进行错误检查,或者我是否可以只检查 $stmt
的最终结果是真还是假?
我正在尝试清理一个函数文件的大约 2000 行,当已经完成大量验证(即检查空值、所需值、空字段等)。
这是我想做的粗略、极其简单的示例。
$sql = "SELECT count(*) FROM foo WHERE somecol = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("s",$value);
$stmt->execute();
$stmt->bind_result($c);
$stmt->fetch();
if(false === $stmt){
//My error report
trigger_error("Something bad happened!" );
//Error user sees
$userErrorMsg[] 'Some generic msg here';
}
编辑: 我可能应该提到 $conn
之前已经检查过了。
您必须决定在您的情况下是否有必要。但是有些程序员会说,捕获错误的代码几乎和正常代码一样。
简而言之:如果有错误CATCH IT ;)
否则我会建议您为您的数据库函数创建一个包装器 class。
只是一个小例子,可以为您指明正确的方向:
class MyDBClass {
private static $con = null;
private static $instance = null;
public static function getInstance() {
if( null === self::$instance) {
// add error handling ;)
self::$instance = new MyDBClass();
self::$instance->setConnection();
}
return self::$instance;
}
private function setConnection() {
if( null === self::$con) {
// add error handling ;)
self::$con = mysqli_connect("localhost","my_user","my_password","my_db");
}
}
private function __construct() {}
public function select( $tableName, $columns = "*", $conditions = array(), $numRows = null ) {
// add your stuff with error handling
}
public function selectRow( $tableName, $columns = "*" , $conditions = array() ) {
// add your stuff with error handling
}
}
// use of class
$db = MyDBClass::getInstance();
$db->select( "mytable" );// would (for example) select * from mytable
注意:这不是一个有效的例子,我建议使用一个好的框架或一个小的包装器class
在生产环境中,当使用准备好的语句并完成所有其他验证时,我是否需要对每个步骤进行错误检查,或者我是否可以只检查 $stmt
的最终结果是真还是假?
我正在尝试清理一个函数文件的大约 2000 行,当已经完成大量验证(即检查空值、所需值、空字段等)。
这是我想做的粗略、极其简单的示例。
$sql = "SELECT count(*) FROM foo WHERE somecol = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("s",$value);
$stmt->execute();
$stmt->bind_result($c);
$stmt->fetch();
if(false === $stmt){
//My error report
trigger_error("Something bad happened!" );
//Error user sees
$userErrorMsg[] 'Some generic msg here';
}
编辑: 我可能应该提到 $conn
之前已经检查过了。
您必须决定在您的情况下是否有必要。但是有些程序员会说,捕获错误的代码几乎和正常代码一样。
简而言之:如果有错误CATCH IT ;)
否则我会建议您为您的数据库函数创建一个包装器 class。
只是一个小例子,可以为您指明正确的方向:
class MyDBClass {
private static $con = null;
private static $instance = null;
public static function getInstance() {
if( null === self::$instance) {
// add error handling ;)
self::$instance = new MyDBClass();
self::$instance->setConnection();
}
return self::$instance;
}
private function setConnection() {
if( null === self::$con) {
// add error handling ;)
self::$con = mysqli_connect("localhost","my_user","my_password","my_db");
}
}
private function __construct() {}
public function select( $tableName, $columns = "*", $conditions = array(), $numRows = null ) {
// add your stuff with error handling
}
public function selectRow( $tableName, $columns = "*" , $conditions = array() ) {
// add your stuff with error handling
}
}
// use of class
$db = MyDBClass::getInstance();
$db->select( "mytable" );// would (for example) select * from mytable
注意:这不是一个有效的例子,我建议使用一个好的框架或一个小的包装器class