PHP选择多于1个结果的准备好的语句

时间:2016-09-25 14:29:58

标签: php sql arrays mysqli prepared-statement

好的,我们假设我有一个这样的数据库

//table name is: exampleTable
 _________________________
| ID | NAME | EXAMPLEDATA |
|----|------|-------------|
| 0  | TOD  | a123        |
| 1  | JEF  | 142b        |
| 2  | MAX  | c412        |
| 3  | TOD  | 124d        |
| 4  | TOD  | e634        |
| 5  | MAX  | 233f        |
| 6  | MAX  | g444        |
|____|______|_____________|

如何使用这样的查询获取EXAMPLEDATE的所有值(使用预准备语句)

SELECT EXAMPLEDATA FROM exampleTable WHERE NAME = 'TOD'

并将结果存储到数组中,以便我可以像这样访问它:

$todArray[0] // equals a123
$todArray[1] // equals 124d
$todArray[2] // equals e634

我知道如何使用预准备语句来获得结果的唯一方法是使用bind_result,但这不会取结果并将其放入数组中,如上所示。

所以这就是我尝试过的但却无法正常工作

$TOD = "TOD";
$dbCON = new mysqli(blah, blah, blah, blah);
$getData = $dbCON->prepare("SELECT `EXAMPLEDATA` FROM `exampleTable` WHERE `NAME`=?");
$getData->bind_param("s", $NAMEVAR);
$NAMEVAR = $TOD;
$getData->execute();
$getData->bind_result($todArray);
$getData->fetch();
$getData->close();

感谢任何帮助,谢谢:)

1 个答案:

答案 0 :(得分:0)

你可以这样做:

首先,我更喜欢你将db连接从mysqli更改为PDO。

现在您可以使用PDO键入这样的查询:

<?php 

            $servername = "your server name";
            $username  = "your username";
            $password   = "your password";
            $database  = "your database name";

            try {
                    $conn = new PDO("mysql:host=$servername;dbname=$database", $username, $password);
                    // set the PDO error mode to exception
                    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                }
            catch(PDOException $e)
                {
                    echo "Connection failed: " . $e->getMessage();
                }
            // End of database connection 

            $TOD = "TOD";
            $fetchdata = $conn->prepare("SELECT EXAMPLEDATA FROM exampleTable WHHERE NAME = ?");
            $fetchdata->execute(array($TOD));

            if($fetchdata)
                {
                    while($fd = $fetchdata->fetch(PDO::FETCH_ASSOC))
                    {
                        echo $fd['EXAMPLEDATA']."\n";
                    }
                }
            else
                {
                    echo "Query did not executed";
                }

?>

现在,您可以通过执行以下操作将获取的数据存储在数组中:

if($fetchdata)
        {
            $ResultsArray = array();

            while($fd = $fetchdata->fetch(PDO::FETCH_ASSOC))
                {
                    $ResultsArray[] = $fd['EXAMPLEDATA'];
                }
        }

编辑:这是MYSQLI代码(未测试)

$TOD = "TOD";
$dbCON = new mysqli(blah, blah, blah, blah);
$getData = $dbCON->prepare("SELECT `EXAMPLEDATA` FROM `exampleTable` WHERE `NAME`=?");
$NAMEVAR = $TOD;
$getData->bind_param("s", $NAMEVAR);
$getData->execute();
call_user_func_array(array($mysqli_stmt_object,"bind_result"),$AnArray);
$ResultsArray = array();

while ($mysqli_stmt_object->fetch()) {
    $results[] = $AnArray;
}

$getData->close();

?>

您可以在此处找到更多信息:

Mysqli - Bind results to an Array

对不起我对MYSQLI不好,希望代码可以工作,但我真的建议你开始使用PDO,它更容易。