rpivovar
rpivovar

Reputation: 3438

jQuery Ajax - $sql is an object Error

UPDATE at bottom of question

I'm getting the error:

Warning: mysqli_query() expects parameter 2 to be string, object given

Questions about this are incredibly common on Stack Overflow - my apologies in advance. I haven't been able to find a good answer for my specific problem. If there is a thread that addresses this, please let me know.

Here is my Ajax code:

    $.ajax({
        url: "get.php",
        type: "post",
        datatype: "json",
        data:{ ajaxid: altCheck }, //this is an integer passed to MySQL statement
        success: function(response){
            console.log(response);
        },
        error: function(){
            console.log("test");
        }
    });

get.php

<?php

$db = mysqli_connect("...", "...", "...", "...");

$value = filter_var($_REQUEST["ajaxid"], FILTER_SANITIZE_STRING);
$value = mysqli_real_escape_string($db, $value);
var_dump($value); //checking to see what $value is at this point

$sql = $db->prepare("SELECT * FROM table WHERE screeningId = ?");
$sql->bind_param("s",$value);


//THIS LINE THROWS THE ERROR
$result = mysqli_query($db, $sql);
$temp = array();
while ($row = mysqli_fetch_array($result)){
    //output data
    array_push($temp,$row['imageURL']);
    }
echo json_encode($temp);
?>

The fourth line of code var_dump($value); outputs string(0).


UPDATE: MySQLi

<?php

$db = mysqli_connect("...", "...", "...", "...");

$value = filter_var($_REQUEST["ajaxid"], FILTER_SANITIZE_STRING);
$value = mysqli_real_escape_string($db, $value);

$query = $db->prepare('SELECT * FROM table WHERE screeningId = ?');
$query->bind_param('s', $_GET[$value]);
$query->execute();

if ($result = mysqli_query($db, $query)) {
    while ($url = mysqli_fetch_object($result, 'imageURL')) {
        echo $url->info()."\n";
    }
}

?>

Screenshot of MySQL table data columns:

enter image description here

Upvotes: 0

Views: 71

Answers (3)

Louys Patrice Bessette
Louys Patrice Bessette

Reputation: 33933

EDIT

Okay... 8 edits spent on mysqli... Enought!
Here is how I DO using PDO. And it WILL work first shot.
I have a separate file for the database connection info.

dbconnection.php:
(The advantage of the separate definition file is one place to update the user password when needed.)

<?php
// Database connection infos (PDO).
$dsn = 'mysql:dbname=[DATABASE_NAME];host=127.0.0.1';
$user = '[DATABASE_USER]';
$password = '[USER_PASSWORD]';


try {
  $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
  echo 'Connexion failed : ' . $e->getMessage();
}
?>

Now in your PHP files where a database request has to be done, include the PDO definition file, the just request what you want:

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

// JUST TO DEBUG!!!
$_REQUEST['ajaxid'] = "1";

// Database request.
$stmt = $dbh->prepare("SELECT * FROM table WHERE screeningId = ?");
$stmt->bindParam(1, $_REQUEST['ajaxid']);
$stmt->execute();

if (!$stmt) {
   echo "\nPDO::errorInfo():\n";
   print_r($dbh->errorInfo());
   die;
}

// Looping through the results.
$result_array =[];
while($row=$stmt->fetch()){
  array_push($result_array,$row['imageURL']);
}

// The result array json encoded.
echo json_encode($result_array);
?>

Upvotes: 1

Naga
Naga

Reputation: 2168

Since you are using mysqli_* all other place in your project, update your get.php as below.

<?php
$db = mysqli_connect("...", "...", "...", "...");

$value = filter_var($_REQUEST["ajaxid"], FILTER_SANITIZE_STRING);
$value = mysqli_real_escape_string($db, $value);
//var_dump($value); //checking to see what $value is at this point

$sql = "SELECT * FROM table WHERE screeningId = '$value'";

$result = mysqli_query($db, $sql);
$temp = array();
while ($row = mysqli_fetch_array($result)){
    //output data
    array_push($temp,$row['imageURL']);
    }
echo json_encode($temp);

EDIT

With respect to bind param with mysqli,

<?php
$conn = new mysqli('db_server', 'db_user', 'db_passwd', 'db_name');


$sql = 'SELECT * FROM table WHERE screeningId = ?';
$stmt = $conn->prepare($sql);
$value = filter_var($_REQUEST["ajaxid"], FILTER_SANITIZE_STRING);
$stmt->bind_param('s', $value);
$stmt->execute();
$res = $stmt->get_result();
$temp = array();
while($row = $res->fetch_array(MYSQLI_ASSOC)) {
  array_push($temp,$row['imageURL']);
}
echo json_encode($temp);

Upvotes: 1

Ali Hesari
Ali Hesari

Reputation: 1949

Select Data With PDO in get.php:

<?php 

    if( isset($_POST['ajaxid']) ) {
      $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      $stmt = $conn->prepare("SELECT * FROM table WHERE screeningId = :screeningId"); 
      $stmt->execute(array(':screeningId' => $_POST['ajaxid']));
      $row = $stmt->fetch();
    }
?>

You configure PDO to throw exceptions upon error. You would then get a PDOException if any of the queries fail - No need to check explicitly. To turn on exceptions, call this just after you've created the $conn object:

$stmt->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Upvotes: 0

Related Questions