neo4jay
neo4jay

Reputation: 41

PDO and alphanumeric strings?

The current error when running this from the command line is "Call to a member function bindParam() on a non-object" which I've worked out to being a problem with the variable $orderPO. Something does not like non-numeric characters which led me to the bindParam PARAM_STR business which does not work either. The database fields are both varchar 50.

My search skills are failing me. I know this must be posted somewhere about a million times but I can't seem to find it. I am completely open to doing this another way if someone has a better idea.

Current attempt code:

try
{
    $orderNum = '123456';
    $orderPO = '123456-A';


    $dbh = new PDO("mysql:host=localhost;dbname=dbname", 'someuser', 'somepass');
    $stm = $dbh->prepare("insert into some_table (order_number, order_po)");
    $stm->bindParam(':order_number', $orderNum, PDO::PARAM_STR);
    $stm->bindParam(':order_po', $orderPO, PDO::PARAM_STR);
    $stm->execute();
    print_r($stm);
    print_r($dbh);
    $arr = $stm->errorInfo();
    print_r($arr);
    $stm->closeCursor();
    $dbh = null;
}
catch(PDOException $e)
{
    echo $e->getMessage();
}

Upvotes: 0

Views: 141

Answers (3)

Rusty Fausak
Rusty Fausak

Reputation: 7525

In order to bind parameters using PDO, you will need to use placeholders, like this:

$stm = $dbh->prepare("
    INSERT INTO `some_table` SET
        `order_number` = :order_number,
        `order_po` = :order_po
");
$stm->bindParam(':order_number', $orderNum, PDO::PARAM_STR);
$stm->bindParam(':order_po', $orderPO, PDO::PARAM_STR);

Notice the inclusion of the : character before the named placeholder. I also added column names to your query.

Read further and see examples: PDO bindParam

Upvotes: 2

Mike Mackintosh
Mike Mackintosh

Reputation: 14237

You are trying to use bindparam, but bind param matches ? not cursors :. You have not included any parameters or values.

Also, you are missing your VALUES statement within the query, which is causing the query to fail. This is why you get the "Call to a member function bindParam() on a non-object"

To use the :value syntax, use bindValue, not bindParam. to use bindParam, switch the :value to ? in your query and number them in order is your execute array.

try
{

    $orderNum = '123456';
    $orderPO = '123456-A';


    $dbh = new PDO("mysql:host=localhost;dbname=dbname", 'someuser', 'somepass');
    $stm = $dbh->prepare("insert into some_table (order_number, order_po) VALUES (:order_number, :order_po)");
    $stm->bindvalue(':order_number', $orderNum, PDO::PARAM_STR);
    $stm->bindvalue(':order_po', $orderPO, PDO::PARAM_STR);
    $stm->execute();
    print_r($stm);
    print_r($dbh);
    $arr = $stm->errorInfo();
    print_r($arr);
    $stm->closeCursor();
    $dbh = null;
}
catch(PDOException $e)
{
    echo $e->getMessage();
}

Upvotes: 0

Mike
Mike

Reputation: 781

The correct syntax is

$stm = $dbh->prepare("insert into some_table (order_number, order_po) VALUES (?, ?)");
$stm->bindParam(1,$orderNum);
$stm->bindParam(2,$orderPO);

include the questions marks, the numbers in the bindParam call refer to which question mark you're binding the parameter to

Upvotes: 0

Related Questions