Фатальная ошибка: Call to member function PrEP () on non-object in
Добрый день, когда я пытаюсь запросить лист в своей форме, я получаю сообщение об ошибке:
фатальная ошибка: вызов функции члена подготовьте () on non-object in
Здесь мой код:
<?php
$serverName = "10.21.22.16"; //serverName\instanceName
$connectionInfo = array( "Database"=>"Siec", "UID"=>"sa", "PWD"=>"k115");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
$result="";
if(array_key_exists("search",$_POST)){
$consul= 'SELECT SOL.FOLIO, SOL.ESTATUSPAG, SV.TOTALP, CS.SERVICIO
FROM
SOLICITU SOL
INNER JOIN SERVSOL SV ON SV.FOLIO=SOL.FOLIO
INNER JOIN CATSERV CS ON CS.SERVS = SV.SERVS
WHERE SOL.FOLIO = ?';
$stmt=$conn->prepare($consul);
$result=$stmt->execute(array($_POST['folio']));
$result=$stmt->fetch();
if(empty($result)){
$result = "No se encontraron resultados!!";
}
}
?>
<html>
<body>
<form action="" method="post">
<div>
<label for="folio">folio: </label>
<input type="text" name="folio" id="folio"/>
<input type="submit" name="search" value="Buscar" />
</div>
</form>
</body>
<?php
if( !empty($result) ) {
?>
<p><strong>folio</strong>: <?php echo $result['folio'];?></p>
<p><strong>Estatus Pagado</strong>: <?php echo $result['Estatuspag'];?></p>
<p><strong>Total</strong>: <?php echo $result['Totalp'];?></p>
<p><strong>Servicio</strong>: <?php echo $result['SERVICIO'];?></p>
<?php
}
?>
</html>
это прямо в этой строке, где я отмечаю ошибку
$stmt=$conn - >PrEP ($consul);
Кто-нибудь знает, почему? Спасибо за ваши ответы
2 answers
Похоже, что ваша проблема связана с соединением, вы можете использовать пример из официальной документации и проверить, было ли соединение успешно выполнено
$serverName = "serverName\sqlexpress"; //serverName\instanceName
$connectionInfo = array( "Database"=>"dbName", "UID"=>"userName", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
echo "Conexión establecida.<br />";
}else{
echo "Conexión no se pudo establecer.<br />";
die( print_r( sqlsrv_errors(), true));
}
?>
Переменная $conn
возвращается FALSE
, а не ресурс, поэтому он показывает вам ошибку
Я редактирую:
Ваша ошибка заключается в том, что переменная $conn
имеет тип resource
нет object
Если мы проверим официальную документацию, для выполнения подготовленного запроса необходимо использовать функцию sqlsrv_prepare()
Суммирование вашего кода происходит следующим образом:
$serverName = "10.21.22.16"; //serverName\instanceName
$connectionInfo = array( "Database"=>"Siec", "UID"=>"sa", "PWD"=>"k115");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
$result="";
if(array_key_exists("search",$_POST))
{
$consul= "SELECT
SOL.FOLIO,
SOL.ESTATUSPAG,
SV.TOTALP,
CS.SERVICIO
FROM
SOLICITU SOL
INNER JOIN SERVSOL SV ON SV.FOLIO=SOL.FOLIO
INNER JOIN CATSERV CS ON CS.SERVS = SV.SERVS
WHERE SOL.FOLIO = ?";
$stmt = sqlsrv_prepare($conn, $consul, array($_POST['folio']));
if( !$stmt )
{
$result = "Error en la consulta";
//die( print_r( sqlsrv_errors(), true));
}
if( sqlsrv_execute( $stmt ) === false )
{
$result = "No se encontraron resultados!!";
//die( print_r( sqlsrv_errors(), true));
}
else
{
$result = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)
}
sqlsrv_free_stmt($stmt);
}
С другой стороны, я рекомендую вам использовать PDO который также поддерживает MS SQL
Использование POO намного проще, и ваш код будет выглядеть примерно так:
$conn = new PDO('sqlsrv:Server=10.21.22.16;Database=Siec','sa','k115');
if(array_key_exists("search",$_POST))
{
$consul= "SELECT
SOL.FOLIO,
SOL.ESTATUSPAG,
SV.TOTALP,
CS.SERVICIO
FROM
SOLICITU SOL
INNER JOIN SERVSOL SV ON SV.FOLIO=SOL.FOLIO
INNER JOIN CATSERV CS ON CS.SERVS = SV.SERVS
WHERE SOL.FOLIO = ?";
$stmt = $conn->prepare($consul);
$folio = $_POST['folio'];
$stmt->bindParam(1, $folio, PDO::PARAM_STR);
if( !$stmt->execute() )
{
$result = "Error en la consulta";
}
else
{
$result = $stmt->fetch(PDO::FETCH_ASSOC);
}
}
Вы можете прочитать официальную документацию PDO, чтобы прояснить любые вопросы :)
Ваш оператор никогда не будет работать, потому что вы забыли некоторые важные шаги, один из них, bind_param()
, Вот где вы получаете ошибку, вы должны передать параметр вашего WHERE SOL. FOLIO=? , то есть вашу переменную $_POST['folio']
Mysqli_stmt:: bind_param -- mysqli_stmt_bind_param-добавляет переменные в подготовленный оператор в качестве параметров
Указание типа символов
i соответствующая переменная целочисленный тип
d соответствующая переменная имеет тип double
s соответствующая переменная имеет тип string
b соответствующая переменная является blob и отправляется в пакетах
Обновленный Пример:
$consul= 'SELECT SOL.FOLIO, SOL.ESTATUSPAG, SV.TOTALP, CS.SERVICIO
FROM
SOLICITU SOL
INNER JOIN SERVSOL SV ON SV.FOLIO=SOL.FOLIO
INNER JOIN CATSERV CS ON CS.SERVS = SV.SERVS
WHERE SOL.FOLIO = ?';
$stmt=$conn->prepare($consul);
$stmt->bind_param("Especificación del tipo de caracteres", $tu_variable_folio);
$stmt->execute();
//Transfiere un conjunto de resulados de la última consulta
$stmt->store_result();
//Comprobamos si existen registros en la Base de datos.
if($stmt->num_rows>0){
//Vincula variables a una sentencia preparada para el almacenamiento de resultados.
$stmt->bind_result($FOLIO,$ESTATUSPAG,$TOTALP,$SERVICIO);//Lo que has seleccionado en tu SELECT
$stmt->fetch();
//Ya puedes trabajar con tus datos desde la Base de datos.
} else {
echo 'Se encontaron 0 resultados.";
}
$stmt->close();//Cerramos sentencia.
Ваш HTML
будет выглядеть так:
<p><strong>folio</strong>: <?php echo $FOLIO;?></p>
<p><strong>Estatus Pagado</strong>: <?php echo $ESTATUSPAG;?></p>
<p><strong>Total</strong>: <?php echo $TOTALP;?></p>
<p><strong>Servicio</strong>: <?php echo $SERVICIO;?></p>
Руководство PHP подготовленные операторы.
Примечание: вы также должны учитывать правильный порядок ваших параметров, чтобы создать свой соединение.
Пример:
$conn = new mysqli("localhost", "usuario", "contraseña", "basedatos");