PHP中的SQL语句占位符的使用是否需要MYSQLI的支持我使用的数据库是mysql想使用占位符的方式去写SQL语句格式如下:select * from table where a=? and b=?当我在不开启mysqli的时候是否也可以这么写如果可以还请给出个完整的例子谢谢

解决方案 »

  1.   

    你可以用adodb擴展,就可以這樣寫,adodb能兼容各種數據庫連接
      

  2.   


    这个是prepare的写法,参考如下例子即可,很简单的:
    mysqli::prepare
    mysqli_prepare
    (PHP 5)mysqli::prepare -- mysqli_prepare — Prepare an SQL statement for execution说明
    面向对象风格mysqli_stmt mysqli::prepare ( string $query )
    过程化风格mysqli_stmt mysqli_prepare ( mysqli $link , string $query )
    Prepares the SQL query, and returns a statement handle to be used for further operations on the statement. The query must consist of a single SQL statement. The parameter ers must be bound to application variables using mysqli_stmt_bind_param() and/or mysqli_stmt_bind_result() before executing the statement or fetching rows. 参数link
    仅以过程化样式:由 mysqli_connect() 或 mysqli_init() 返回的链接标识。query 
    The query, as a string. Note: You should not add a terminating semicolon or \g to the statement. 
    This parameter can include one or more parameter ers in the SQL statement by embedding question  (?) characters at the appropriate positions. Note: The ers are legal only in certain places in SQL statements. For example, they are allowed in the VALUES() list of an INSERT statement (to specify column values for a row), or in a comparison with a column in a WHERE clause to specify a comparison value. However, they are not allowed for identifiers (such as table or column names), in the select list that names the columns to be returned by a SELECT statement, or to specify both operands of a binary operator such as the = equal sign. The latter restriction is necessary because it would be impossible to determine the parameter type. It's not allowed to compare er with NULL by ? IS NULL too. In general, parameters are legal only in Data Manipulation Language (DML) statements, and not in Data Definition Language (DDL) statements. 返回值
    mysqli_prepare() returns a statement object or FALSE if an error occurred. 范例
    Example #1 mysqli::prepare() example面向对象风格<?php
    $mysqli = new mysqli("localhost", "my_user", "my_password", "world");/* check connection */
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }$city = "Amersfoort";/* create a prepared statement */
    if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {    /* bind parameters for ers */
        $stmt->bind_param("s", $city);    /* execute query */
        $stmt->execute();    /* bind result variables */
        $stmt->bind_result($district);    /* fetch value */
        $stmt->fetch();    printf("%s is in district %s\n", $city, $district);    /* close statement */
        $stmt->close();
    }/* close connection */
    $mysqli->close();
    ?> 
    过程化风格<?php
    $link = mysqli_connect("localhost", "my_user", "my_password", "world");/* check connection */
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }$city = "Amersfoort";/* create a prepared statement */
    if ($stmt = mysqli_prepare($link, "SELECT District FROM City WHERE Name=?")) {    /* bind parameters for ers */
        mysqli_stmt_bind_param($stmt, "s", $city);    /* execute query */
        mysqli_stmt_execute($stmt);    /* bind result variables */
        mysqli_stmt_bind_result($stmt, $district);    /* fetch value */
        mysqli_stmt_fetch($stmt);    printf("%s is in district %s\n", $city, $district);    /* close statement */
        mysqli_stmt_close($stmt);
    }/* close connection */
    mysqli_close($link);
    ?> 
    以上例程会输出:Amersfoort is in district Utrecht