-2
我試了幾個小時纔得到這個工作。PDO PHP MYSQL混合命名和位置參數
<?php
require_once('inc.connect.php');
if($_SERVER['REQUEST_METHOD'] == 'GET')
{
if(isset($_REQUEST))
{
$type = array_keys($_REQUEST)[0];
$value = $_REQUEST[$type];
if($value === null)
{
$where_like = null;
}
else
{
$where_like = ' WHERE ' . $type . '_name LIKE ?';
}
$db = new PDO('mysql:host=' . MYSQL_HOST . ';dbname=' . MYSQL_DBNAME . ';charset=UTF8', MYSQL_USERNAME, MYSQL_PASSWORD);
$sql_statement = 'SELECT :' . $type . '_id, :' . $type . '_name FROM report_' . $type . $where_like;
$sql_prepare = $db->prepare($sql_statement);
if(!(is_null($where_like))) $sql_prepare->bindValue(1, '"%' . $value . '%"', PDO::PARAM_STR);
try{
while($sql_result = $sql_prepare->execute())
{
$return[$sql_result[$type . '_id']] = $sql_result[$type . '_name'];
}
$return_JSON = json_encode($return);
}
catch(PDOException $exception){
return $exception->getMessage();
}
echo "exception: ".$exception;
}
}
我不斷收到這...
警告:PDOStatement對象::執行():SQLSTATE [HY093]:無效的參數號:混合命名和位置參數
預處理語句不習慣這樣。使用預定義的查詢,不要在運行時生成它。查找一個教程並重寫你的整個代碼。 –
爲什麼不呢?我知道他們通常不是這樣使用的,但我沒有看到動態創建查詢的任何錯誤。 –
如果沒有問題,爲什麼它不起作用?最好使用預定義的查詢。正如您現在所看到的那樣,調試清楚,可以理解並且不會帶來任何麻煩。 –