Thread: Looking for some assistance / guidance --

Looking for some assistance / guidance --

From
Jeff Silberberg
Date:
Good evening --

I have a Wordpress / HTML form that includes <select size="5" multiple name=Keys[]"....>

The form calls a PHP CGI program and if I set it to phpinfo()  I see that the array Keys is in the post data.  An I can do a $selectedKeys = $_POST('Keys')  and walk through and echo out the array elements without a problem. 

My issues start when I attempt to pass the array of Keys to my PostgreSql function with a parameter list of (web_Keys_ integer[], web_text_ text, web_user_ text) ................

in my php I do a pg_connect, and then prepare a number of statements all of which work but the last one. 

    it is $return_cde = pg_prepare($conn, "SendKeys", 'select web.sendKeys$1, $2, $3)');. 

   and I try to execute this with

      $userKey=$_POST['Keys'];
      $userText=$_POST['msgText'] . " / " . $current_user->display_name;

      $return = pg_execute($conn, "SendKeys", array($userKey, $userText, $current_user->display_name));

      Which returns and error --

function.pg-execute]: Query failed: ERROR: array value must start with "{" or dimension information in /home/xxxxxxx/public_html/enterkey/cgi-bin/xxxxxxcgi.php on line 90


      echo "User Keys " . gettype($userKey)."<br>\n";   confirms this is a Array ..    An I have tried casting  $1::int[]  in the prepare with no luck..

      I find a lot of hits on Google searches but no solutions..

      Hoping someone here can assist me with this issue..

=============


Re: Looking for some assistance / guidance --

From
Matthias Ritzkowski
Date:
Is the array maybe zero-based?

Did you try 'select web.sendKeys$0, $1, $2, $3' ....

Regards
Matthias

On 7/28/14, 8:45 PM, Jeff Silberberg wrote:
Good evening --

I have a Wordpress / HTML form that includes <select size="5" multiple name=Keys[]"....>

The form calls a PHP CGI program and if I set it to phpinfo()  I see that the array Keys is in the post data.  An I can do a $selectedKeys = $_POST('Keys')  and walk through and echo out the array elements without a problem. 

My issues start when I attempt to pass the array of Keys to my PostgreSql function with a parameter list of (web_Keys_ integer[], web_text_ text, web_user_ text) ................

in my php I do a pg_connect, and then prepare a number of statements all of which work but the last one. 

    it is $return_cde = pg_prepare($conn, "SendKeys", 'select web.sendKeys$1, $2, $3)');. 

   and I try to execute this with

      $userKey=$_POST['Keys'];
      $userText=$_POST['msgText'] . " / " . $current_user->display_name;

      $return = pg_execute($conn, "SendKeys", array($userKey, $userText, $current_user->display_name));

      Which returns and error --

function.pg-execute]: Query failed: ERROR: array value must start with "{" or dimension information in /home/xxxxxxx/public_html/enterkey/cgi-bin/xxxxxxcgi.php on line 90


      echo "User Keys " . gettype($userKey)."<br>\n";   confirms this is a Array ..    An I have tried casting  $1::int[]  in the prepare with no luck..

      I find a lot of hits on Google searches but no solutions..

      Hoping someone here can assist me with this issue..

=============



Re: Looking for some assistance / guidance --

From
Jeff Silberberg
Date:
Nope ---

    http://php.net/manual/en/function.pg-prepare.

    If any parameters are used, they are referred to in the query as $1, $2, etc.



On Mon, Jul 28, 2014 at 9:03 PM, Matthias Ritzkowski <matthiar@gmail.com> wrote:
Is the array maybe zero-based?

Did you try 'select web.sendKeys$0, $1, $2, $3' ....

Regards
Matthias


On 7/28/14, 8:45 PM, Jeff Silberberg wrote:
Good evening --

I have a Wordpress / HTML form that includes <select size="5" multiple name=Keys[]"....>

The form calls a PHP CGI program and if I set it to phpinfo()  I see that the array Keys is in the post data.  An I can do a $selectedKeys = $_POST('Keys')  and walk through and echo out the array elements without a problem. 

My issues start when I attempt to pass the array of Keys to my PostgreSql function with a parameter list of (web_Keys_ integer[], web_text_ text, web_user_ text) ................

in my php I do a pg_connect, and then prepare a number of statements all of which work but the last one. 

    it is $return_cde = pg_prepare($conn, "SendKeys", 'select web.sendKeys$1, $2, $3)');. 

   and I try to execute this with

      $userKey=$_POST['Keys'];
      $userText=$_POST['msgText'] . " / " . $current_user->display_name;

      $return = pg_execute($conn, "SendKeys", array($userKey, $userText, $current_user->display_name));

      Which returns and error --

function.pg-execute]: Query failed: ERROR: array value must start with "{" or dimension information in /home/xxxxxxx/public_html/enterkey/cgi-bin/xxxxxxcgi.php on line 90


      echo "User Keys " . gettype($userKey)."<br>\n";   confirms this is a Array ..    An I have tried casting  $1::int[]  in the prepare with no luck..

      I find a lot of hits on Google searches but no solutions..

      Hoping someone here can assist me with this issue..

=============






Re: Looking for some assistance / guidance --

From
Michael Wallner
Date:
On 29/07/14 02:45, Jeff Silberberg wrote:

>       echo "User Keys " . gettype($userKey)."<br>\n";   confirms this is
> a Array ..    An I have tried casting  $1::int[]  in the prepare with no
> luck..
>

You have to format it as postgresql array string, so that it can be
parsed as array by the server, e.g: '{1,2,3}'::int[]

So, assuming they keys are integers:
$userKey = "{".implode(",",array_map("intval", $userKey))."}::int[]";

--
Regards,
Mike


Re: Looking for some assistance / guidance --

From
Jeff Silberberg
Date:
Michael,

    About three am I woke up with this same basic thought in my head.. 

    Will try it latter this morning, but I suspect this is the correct answer.

    Thank you !



On Tue, Jul 29, 2014 at 5:02 AM, Michael Wallner <mike@php.net> wrote:
On 29/07/14 02:45, Jeff Silberberg wrote:

>       echo "User Keys " . gettype($userKey)."<br>\n";   confirms this is
> a Array ..    An I have tried casting  $1::int[]  in the prepare with no
> luck..
>

You have to format it as postgresql array string, so that it can be
parsed as array by the server, e.g: '{1,2,3}'::int[]

So, assuming they keys are integers:
$userKey = "{".implode(",",array_map("intval", $userKey))."}::int[]";

--
Regards,
Mike