/** * PHP preprocessing Execute SQL * $sql [string]sql statement * $args [array] parameter */public function exesql ($sql, $args) {$mysqli _stmt= $mysqli Prepare ($sql);//Because $sql is passed in by the caller, the number of SQL statements and arguments is indeterminate//question 1: How do I get the parameter type? Is there a corresponding function in PHP? If not I use the following method: Getparamtypestr ($arr) is it feasible? Do you have any good advice? Question 2: How to bind parameters? The following is the binding method when the number of arguments is determined. $mysqli _stmt->bind_param ("SSI", "xx", "xx"), $mysqli _stmt->execute (); $mysqli->close ();} Private Function Getparamtypestr ($arr) {$count = count ($arr); $typestr = ""; for ($i = 0; $i < $count; $i + +) {$type = GetType ($arr [$i]); switch ($type) {case ' integer ': $typestr. = "I"; Break;case "float": Case "Double": $ typestr.= "D"; Break;case "string": $typestr. = "S"; break;}} return $TYPESTR;}
I know that Java is implemented in the following ways:
Preprocessing in Java execution sqlpublic void Exesql (String sql,object[] args) {PreparedStatement PreparedStatement = Connection.preparestatement (SQL); for (int i =0;i
Which friend to help answer the above 2 questions, I just turned to PHP, read the document, there is a mention of reflection, not very understand, there are friends said by replacing the '? ' in SQL, but also look at friends detailed guidance, it is best to provide a point core code. Thank you so much!
Reply to discussion (solution)
2.
$callback = Array ($mysqli _stmt, ' Bind_param ');//The parameter type description is added to the array array_unshift ($args, Getparamtypestr ($args)); Call_user_func_array ($callback, $args);//Its invocation is similar to: $mysqli _stmt->bind_param (Getparamtypestr ($args), $args [0], $ ARGS[1], $args [2] ...);
Recommend you use pdo,mysqli this function is not good, PDO of the Bindparam () method to be more intuitive
http://www.php.net/manual/en/pdostatement.bindparam.php I have one of my own PHP PDO classes that you can use directly:
dbhost= $dbhost, $this->dbuser= $dbuser, $this->dbpwd= $dbpwd; $this->dbname= $dbname; $this->dbport=$ Dbport; $this->ifpdo= $ifpdo; $this->dburi= $dburi;//pdo uri parameter, you can check the manual if ($this->ifpdo==1) {///means call PDO to manipulate the database $ this->handler= $this->createpdo ();} ElseIf ($this->ifpdo==0) {//here can write Mysqli method $this->handler=null;}} /*----------------Here is the entry---------------------*///@param sql: Full SQL statement passed on external call//@param bindarray: An array of parameters for the binding, related to the SQL statement, If there is no PDO placeholder here is a null//@param action: Pass Action arguments, "select"/"Update"/"delete"/"Insert" public function Exesql ($sql, $bindArray = Array (), $action = "") {$stmt = $this->handler->prepare ($sql); $stmt->execute ($bindArray); switch ($action) { Case "SELECT": Return $stmt->fetch (PDO::FETCH_ASSOC), break;case "SelectAll": Return $stmt->fetchall (pdo::fetch _ASSOC); break;case "Update": Case "Delete": Return $stmt->rowcount (); Break;case "Insert": Return $this->handler- >lastinsertid (); Break;case "Count": Return $stmt->rowcount ();d Efault:return "";}} Public Function Query ($sql) {RETUrn $this->handler->query ($sql);} Private Function Createpdo () {try{$handler =new PDO ($this->dburi, $this->dbuser, $this->dbpwd); $handler SetAttribute (pdo::attr_errmode,pdo::errmode_exception); return $handler;} catch (Pdoexception $e) {$e->getmessage (); $this->handler=null;}} Private Function __get ($args) {if ($args = = ' Handler ') {return $this->handler;}}} Require (neo_a_p. ' \data\sqlconfig.php ');//Here is the SQL connection file, the following object is created when the variable is required to have $handler=new Mysqlconnect ($dbhost, $dbuser, $dbpwd, $dbname, $dbport, $ifpdo, $dburi);? >
I have one of my own PHP PDO classes that you can use directly:
PHP code? 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 66676869707172737475767778 ...
When called, the direct require contains the class, and then the $handler is the Action object
Thanks for the 2 enthusiastic friends upstairs.