2016-12-13 3 views
-3

Это мой сервер код стороны:Передача несколько параметров подготовленного заявления

<?php 
    include('DBconnection.php'); 

    $q = ""; 
    $q = $_REQUEST["q"]; 

    function getAlSubjects($searchtext){ 
     $connection = db_connect(); 
     $statement = $connection->prepare('select * from olsubjectmaster where (ifnull(?,"")="" or SubjectID like ? or SubjectID like ?) ORDER BY SubjectID'); 

     $statement->bind_param(1,$searchtext,PDO::PARAM_STR, 200); 
     $statement->bind_param(2,$searchtext.'%',PDO::PARAM_STR, 200); 
     $statement->bind_param(3,'%'.$searchtext.'%',PDO::PARAM_STR, 200);   

     $result=$statement.execute(); 
     $connection.close(); 
     $statement.close(); 
     return $result; 
    } 

    $value=''; 

    while($row = getAlSubjects($q)->fetch_assoc()) { 
     echo $row["SubjectID"]; 
    } 
?> 

Когда я выполняю это, он показывает следующее сообщение об ошибке:

Fatal error: Cannot pass parameter 2 by reference in D:\xampp\htdocs\GetSubject.php on line 15

Как я могу это исправить? Это мой DBconnection.php код файла

<?php 
function db_connect() { 

// Define connection as a static variable, to avoid connecting more than once 
static $connection; 

// Try and connect to the database, if a connection has not been established yet 
if(!isset($connection)) { 
    // Load configuration as an array. Use the actual location of your configuration file 
    $config = parse_ini_file('config.ini'); 
    $connection = mysqli_connect('localhost',$config['username'],$config['password'],$config['dbname']); 
} 

// If connection was not successful, handle the error 
if($connection === false) { 
    // Handle error - notify administrator, log to a file, show an error screen, etc. 
    return mysqli_connect_error(); 
} 
return $connection; 
} 
?> 
+0

Вы смешиваете здесь mysql apis. –

+0

В какой строке? следует ли удалить эту функцию и написать напрямую? –

+0

и Господь знает, с каким API-интерфейсом можно связаться. –

ответ

3

Да это не допускается,

$statement->bind_param(2,$searchtext.'%',PDO::PARAM_STR, 200); 
$statement->bind_param(3,'%'.$searchtext.'%',PDO::PARAM_STR, 200); 

Эти операции приводят новые строковые литералы создается. Строковые литералы не могут быть связаны. Вы должны

$param2 = $searchtext.'%'; 
$param3 = '%'.$searchtext.'%'; 
$statement->bind_param(2,$param2,PDO::PARAM_STR, 200); 
$statement->bind_param(3,$param3,PDO::PARAM_STR, 200); 

В качестве примечания, так как вы сравниваете для% SearchText%, нет необходимости искать SearchText%

обновление: Как Фред указал, вы оказываетесь для использования PDO, но вызывающий bind_param, который является частью mysqli api, а не PDO. Правильно все в PDO: bindParam

+0

Я исправил это, как вы сказали, но его все еще не работает. В нем говорится: «Неустранимая ошибка: не может передать параметр 3 по ссылке в D: \ xampp \ htdocs \ GetSubject.php в строке 15» снова –

+0

Is есть ли синтаксическая ошибка в этом сегменте? "while ($ row = getAlSubjects ($ q) -> fetch_assoc())" –

+0

Я меняю все 3 места, $ param1 = $ searchtext; $ param2 = $ searchtext. '%'; $ param3 = '%'. $ Searchtext. '%'; $ statement-> bind_param (1, $ param1, PDO :: PARAM_STR, 200); $ statement-> bind_param (2, $ param2, PDO :: PARAM_STR, 200); $ statement-> bind_param (3, $ param3, PDO :: PARAM_STR, 200); –

Смежные вопросы