i had some php scripts working with mysql_query but now i was trying to change it to PDO (to be less vulnerable and more secure they say) but i'm having some problems with conditional select queries. I have the following code:
$querydatahora = $conn->prepare('SELECT
Linhas.NomeLinha, Maquinas.Nome as maquina, Tecnicos.Nome, Avarias.DataHoraInicioAvaria,
Avarias.DataHoraFimAvaria, Avarias.Descricao, Avarias.Solucao, Avarias.TipoSolucao
FROM Avarias, Tecnicos, Linhas, Maquinas, avariatecnico
where Linhas.IDLinha = Avarias.IDLinha and avariatecnico.IDAvaria = avarias.IDAvaria and Avariatecnico.IDTecnico = Tecnicos.IDTecnico and
Maquinas.IDMaquina = Avarias.IDMaquina and DataHoraInicioAvaria >= :datetimepicker AND DataHoraFimAvaria <= :datetimepicker1 ');
if( $_SESSION['IDLinha'] ) {
$querydatahora .= $conn->prepare(" AND Avarias.IDLinha = :IDLinha AND Avarias.IDMaquina = :IDMaquina order by DataHoraInicioAvaria DESC LIMIT $startrow, 9");
} else{
$querydatahora .= $conn->prepare(" order by DataHoraInicioAvaria DESC LIMIT $startrow, 9");
}
$querydatahora->execute( array(
':datetimepicker' => $_SESSION['datetimepicker'],
':datetimepicker1' => $_SESSION['datetimepicker1'],
':IDLinha' => $_SESSION['IDLinha'],
':IDMaquina' => $_SESSION['IDMaquina'])
);
if( $_SESSION['IDLinha'] ) {
$querycount .= $conn->prepare(' AND Avarias.IDLinha = :IDLinha AND Avarias.IDMaquina = :IDMaquina');
}
$querycount->execute( array(
':datetimepicker' => $_SESSION['datetimepicker'],
':datetimepicker1' => $_SESSION['datetimepicker1'],
':IDLinha' => $_SESSION['IDLinha'],
':IDMaquina' => $_SESSION['IDMaquina'])
);
The error i'm getting is:
Catchable fatal error: Object of class PDOStatement could not be converted to string in C:\xxxxxxxxxxxxxxxxxxxxxxxxxx.php on line 52
I'm not an expert on this so, probably i'm making something wrong. All the help is appreciated
prepare()returns aPDOStatementobject which is where your exception is coming from, it's not a string. You should only passprepare()the full query, i.e. generate the SQL query (with placeholders) into a string, then runprepare()passing the completed query string.