Thread: Error
i have the following code... // start $db = &ADONewConnection('postgres'); $db -> Connect($db_string,$db_owner,$db_pw,$db_name); // $db -> debug=true; $customer_name = $form->GetInputValue('customer_name'); $customer_id = $db->getone("select nextval('t_customer_cust_id_seq')"); $sql_insert = <<<_EOSQL INSERT INTO t_customer (customer_id, customer_name, customer_entry_date) VALUES (?,?,?) _EOSQL; $result = $db->Execute($sql_insert, array($customer_id, $customer_name, $db->DBDate(time()))); //end code it produces the following error... ERROR: column "customer_id" is of type integer but expression is of type boolean HINT: You will need to rewrite or cast the expression. any ideas? __________________________________ Yahoo! Mail - PC Magazine Editors' Choice 2005 http://mail.yahoo.com
--- Charley Tiggs <ctiggs@xpressdocs.com> wrote: > On Nov 30, 2005, at 3:35 PM, > <operationsengineer1@yahoo.com> > <operationsengineer1@yahoo.com> wrote: > > > i have the following code... > > > > // start > > > > $db = &ADONewConnection('postgres'); > > $db -> > > Connect($db_string,$db_owner,$db_pw,$db_name); > > // $db -> debug=true; > > > > $customer_name = > > $form->GetInputValue('customer_name'); > > $customer_id = $db->getone("select > > nextval('t_customer_cust_id_seq')"); > > > > $sql_insert = <<<_EOSQL > > > > INSERT INTO t_customer (customer_id, > > customer_name, customer_entry_date) > > VALUES (?,?,?) > > > > _EOSQL; > > > > $result = $db->Execute($sql_insert, > > array($customer_id, $customer_name, > > $db->DBDate(time()))); > > > > //end code > > > > it produces the following error... > > > > ERROR: column "customer_id" is of type integer but > > expression is of type boolean HINT: You will need > to > > rewrite or cast the expression. > > > > any ideas? > > What's the value of $customer_id before you attempt > the insert? > > right after $customer_id variable is set, do the > following: > > echo $customer_id . '<br />'; > echo gettype ( $customer_id ); > exit; > the answer is... boolean. > With ADO, a couple of times, I've run into a glitch > where bindings > changed types. Haven't taken the time to figure out > why. Switching > to autoExecute solves the problem: > > $insert_array = array ( 'customer_id' => > $db->getone("select nextval > ('t_customer_cust_id_seq')"), > 'customer_name' => > $form->GetInputValue('customer_name'), > 'customer_entry_date' => $db->DBDate(time())) > > $result = $db->autoExecute ( 't_customer', > $insert_array, > 'INSERT' ); > > Most likely, the reason it works for me is that I > cleaned up my error > when switching to the autoExecute method. > > Charley Charley, i'm not sure. this code worked before i upgraded both pgsql. at least i'm pretty darn sure it did. then again, maybe i've lost my mind. having said that, i don't see anything in the code that says "boolean" to me. i will try and cast it is an integer and let the adodb maintainer know about this issue. __________________________________ Yahoo! Mail - PC Magazine Editors' Choice 2005 http://mail.yahoo.com
> What's the value of $customer_id before you attempt > the insert? > > right after $customer_id variable is set, do the > following: > > echo $customer_id . '<br />'; > echo gettype ( $customer_id ); > exit; > > With ADO, a couple of times, I've run into a glitch > where bindings > changed types. Haven't taken the time to figure out > why. Switching > to autoExecute solves the problem: > > $insert_array = array ( 'customer_id' => > $db->getone("select nextval > ('t_customer_cust_id_seq')"), > 'customer_name' => > $form->GetInputValue('customer_name'), > 'customer_entry_date' => $db->DBDate(time())) > > $result = $db->autoExecute ( 't_customer', > $insert_array, > 'INSERT' ); > > Most likely, the reason it works for me is that I > cleaned up my error > when switching to the autoExecute method. > > Charley using php to cast to to an integer... $customer_id = (int) $customer_id; ...worked for me. i have a note in on the adodb forum to find out why it is casting as boolean. __________________________________ Yahoo! Music Unlimited Access over 1 million songs. Try it free. http://music.yahoo.com/unlimited/
On Nov 30, 2005, at 3:35 PM, <operationsengineer1@yahoo.com> <operationsengineer1@yahoo.com> wrote: > i have the following code... > > // start > > $db = &ADONewConnection('postgres'); > $db -> > Connect($db_string,$db_owner,$db_pw,$db_name); > // $db -> debug=true; > > $customer_name = > $form->GetInputValue('customer_name'); > $customer_id = $db->getone("select > nextval('t_customer_cust_id_seq')"); > > $sql_insert = <<<_EOSQL > > INSERT INTO t_customer (customer_id, > customer_name, customer_entry_date) > VALUES (?,?,?) > > _EOSQL; > > $result = $db->Execute($sql_insert, > array($customer_id, $customer_name, > $db->DBDate(time()))); > > //end code > > it produces the following error... > > ERROR: column "customer_id" is of type integer but > expression is of type boolean HINT: You will need to > rewrite or cast the expression. > > any ideas? What's the value of $customer_id before you attempt the insert? right after $customer_id variable is set, do the following: echo $customer_id . '<br />'; echo gettype ( $customer_id ); exit; With ADO, a couple of times, I've run into a glitch where bindings changed types. Haven't taken the time to figure out why. Switching to autoExecute solves the problem: $insert_array = array ( 'customer_id' => $db->getone("select nextval ('t_customer_cust_id_seq')"), 'customer_name' => $form->GetInputValue('customer_name'), 'customer_entry_date' => $db->DBDate(time())) $result = $db->autoExecute ( 't_customer', $insert_array, 'INSERT' ); Most likely, the reason it works for me is that I cleaned up my error when switching to the autoExecute method. Charley
On Nov 30, 2005, at 7:12 PM, <operationsengineer1@yahoo.com> <operationsengineer1@yahoo.com> wrote: >> What's the value of $customer_id before you attempt >> the insert? >> >> right after $customer_id variable is set, do the >> following: >> >> echo $customer_id . '<br />'; >> echo gettype ( $customer_id ); >> exit; >> >> With ADO, a couple of times, I've run into a glitch >> where bindings >> changed types. Haven't taken the time to figure out >> why. Switching >> to autoExecute solves the problem: >> >> $insert_array = array ( 'customer_id' => >> $db->getone("select nextval >> ('t_customer_cust_id_seq')"), >> 'customer_name' => >> $form->GetInputValue('customer_name'), >> 'customer_entry_date' => $db->DBDate(time())) >> >> $result = $db->autoExecute ( 't_customer', >> $insert_array, >> 'INSERT' ); >> >> Most likely, the reason it works for me is that I >> cleaned up my error >> when switching to the autoExecute method. >> >> Charley > > using php to cast to to an integer... > > $customer_id = (int) $customer_id; > > ...worked for me. i have a note in on the adodb forum > to find out why it is casting as boolean. I think your query failed. After you execute this query: >> $customer_id = $db->getone("select nextval >> ('t_customer_cust_id_seq')"); do the following: echo $db->ErrorMsg(); exit; That will tell you why the query failed. Charley
--- Charley Tiggs <charley@xpressdocs.com> wrote: > On Nov 30, 2005, at 7:12 PM, > <operationsengineer1@yahoo.com> > <operationsengineer1@yahoo.com> wrote: > > >> What's the value of $customer_id before you > attempt > >> the insert? > >> > >> right after $customer_id variable is set, do the > >> following: > >> > >> echo $customer_id . '<br />'; > >> echo gettype ( $customer_id ); > >> exit; > >> > >> With ADO, a couple of times, I've run into a > glitch > >> where bindings > >> changed types. Haven't taken the time to figure > out > >> why. Switching > >> to autoExecute solves the problem: > >> > >> $insert_array = array ( 'customer_id' => > >> $db->getone("select nextval > >> ('t_customer_cust_id_seq')"), > >> 'customer_name' => > >> $form->GetInputValue('customer_name'), > >> 'customer_entry_date' => > $db->DBDate(time())) > >> > >> $result = $db->autoExecute ( 't_customer', > >> $insert_array, > >> 'INSERT' ); > >> > >> Most likely, the reason it works for me is that I > >> cleaned up my error > >> when switching to the autoExecute method. > >> > >> Charley > > > > using php to cast to to an integer... > > > > $customer_id = (int) $customer_id; > > > > ...worked for me. i have a note in on the adodb > forum > > to find out why it is casting as boolean. > > I think your query failed. great call. > After you execute this query: > > >> $customer_id = $db->getone("select nextval > >> ('t_customer_cust_id_seq')"); > > do the following: > > echo $db->ErrorMsg(); > exit; > > That will tell you why the query failed. > > Charley it says... ERROR: relation "t_customer_cust_id_seq" does not exist i'm off to hunt down the actual name of the sequence. bottom line - if you get a boolean response, check to see if the query has failed first. thank you for the insight. __________________________________ Yahoo! Music Unlimited Access over 1 million songs. Try it free. http://music.yahoo.com/unlimited/
> it says... > > ERROR: relation "t_customer_cust_id_seq" does not > exist > > i'm off to hunt down the actual name of the sequence. > > bottom line - if you get a boolean response, check to > see if the query has failed first. > > thank you for the insight. Quite a few functions in php do this. If you use the syntax == or != it is C-style compare. That is, zero is false and basically the rest is true. If you use === or !== it evaluates to true if both the types are equal AND the statement is true. So, the correct syntax would be if (false === ($customer_id = $db->getone("..."))) { error handling. } Example from the manual: // in PHP 4.0b3 and newer: $pos = strrpos($mystring, "b"); if ($pos === false) { // note: three equal signs // not found... } By doing this, strrpos can return 0 (not an error) or false (not found). Without === strrpos would have to return -1 or some other illegal position for not found. Best regards, Marcus