Prepared Statements - Search

"Ethan Rosenberg, PhD" <[email protected]>
Newsgroups gmane.comp.php.database
Organization Hygeia Biomedical Research, Inc.
Message-ID <[email protected]>
Dear List -

I am trying to use prepared statements with the following code:

                 $allowed_fields = array
                     ('Cust_Num' => 'i',  'Fname' => 's', 'Lname' => 
's', 'Street' => 's','City'=> 's',   'State' => 's',   'Zip' => 'i',
                     'Phone' => 'i', 'Notes' => 's'
                     );

                 if(empty($allowed_fields))
                 {
                      echo "ouch";
                 }

                 // Configure the query and the acceptable params to put 
into the WHERE clause
                 $sql12 = 'SELECT * FROM Customers WHERE 1';

                // Magically put everything together
                 $types = '';
                 $args = array();
                 foreach( $allowed_fields as $k => $type )
                 {
                  if( !array_key_exists( $k, $allowed_fields ) )
                         continue;
                     else
                     {
                         if( ($_POST[$k]) != '')
                         {
                             $args[] = &$_POST[$k]; // Note the addition 
of the ampersand here
                             $types .= $type;
                             $sql12 .= " AND ($k = ?)";
                         }
                     }
                 }

                 $stmt = mysqli_stmt_init($cxn);
                 mysqli_stmt_prepare( $stmt, $sql12 );

The search fails.

This debug code:

                 echo "For debugging and demonstration #1<br />";
                 echo 'Query: ' . $sql12 . PHP_EOL;
                 echo 'Bind types: ' . $types . PHP_EOL;
                 echo "arguments<br />";
                 print_r($args);

gives the following results:

					
For debugging and demonstration #1
Query: SELECT * FROM Customers WHERE 1 AND (Fname = ?) AND (Lname = ?) AND (Street = ?) AND (City = ?) AND (State = ?) AND (Zip = ?) AND (Phone = ?)
Bind types: sssssii
arguments
Array
(
     [0] =>
     [1] =>
     [2] =>
     [3] =>
     [4] =>
     [5] =>
     [6] =>  845745745
)

If I search the database from the command line, these are the results -

					
mysql>  select * from Customers where Phone=845745745;
+----------+---------+--------------+--------+--------+-------+-------+-----------+------------+---------------------+------+------+------+
| Cust_Num | Fname   | Lname        | Street | City   | State | Zip   | Phone     | Date       | Notes               | P1   | P2   | P3   |
+----------+---------+--------------+--------+--------+-------+-------+-----------+------------+---------------------+------+------+------+
|    10016 | okuibtg | uymkibtvgfrc | p7tvgf | Monsey | NY    |   127 | 845745745 | 2012-12-01 |   tvgfuyholkijuhy   | NULL | NULL | NULL |
|    10017 | okuibtg | uymkibtvgfrc | p7tvgf | Monsey | NY    | 10952 | 845745745 | 2012-12-01 |   tvgfuyholkijuhy   | NULL | NULL | NULL |
|    10018 | okuibtg | uymkibtvgfrc | p7tvgf | Monsey | NY    | 32767 | 845745745 | 2012-12-02 |   tvgfuyholkijuhy   | NULL | NULL | NULL |
+----------+---------+--------------+--------+--------+-------+-------+-----------+------------+---------------------+------+------+------+
3 rows in set (0.00 sec)

This is the output routine:

				if(count($errors_array) == 0)
				{
	?>				
						
						<center><b>Search Results</b></center><br />
							<center>
						<table border="4" cellpadding="5" cellspacing="55"  rules="all" frame="box" style="table-layout: fixed;">
						<tr class="heading">
						<th>Cust_Num</th>
						<th>First Name</th>
						<th>Last Name</th>
						<th>Street</th>
						<th>City</th>
						<th>State</th>
						<th>Zip</th>
						<th>Phone</th>
						<th>Notes</th>
						
						
						
						
	<?php     		$i = 0;
					do
					{
						{
							
							$vara2 = array(array($Cust_Num, $Fname, $Lname, $Street, $City, $State, $Zip, $Phone, $Notes));
							$vara2[$i][0]	= $Cust_Num;					
							$vara2[$i][1]	= $Fname;					
							$vara2[$i][2]	= $Lname;					
							$vara2[$i][3]	= $Street;					
							$vara2[$i][4]	= $City;					
							$vara2[$i][5]	= $State;					
							$vara2[$i][6]	= $Zip;					
							$vara2[$i][7]	= $Phone;					
							$vara2[$i][8]	= Notes;				

							$_SESSION['exe'] = 2;
	?>						
							
	
							<tr>
							<td>  <?php echo $vara2[$i][0]?>  </td>
							<td>  <?php echo $vara2[$i][1]?>  </td>
							<td>  <?php echo $vara2[$i][2]?>  </td>
							<td>  <?php echo $vara2[$i][3]?>  </td>
							<td>  <?php echo $vara2[$i][4]?>  </td>
							<td>  <?php echo $vara2[$i][5]?>  </td>
							<td>  <?php echo $vara2[$i][6]?>  </td>
						 	<td>  <?php echo $vara2[$i][7]?>  </td>
							<td class="first-col"><?php echo $vara2[$i][8] ?></td>
	<?php					 echo "</tr>\n";
								$i = $i + 1;
							}
					} while (mysqli_stmt_fetch($stmt)); //end do-while
								$imax = $i;
								echo "</table>";
								echo "</center>";
								echo "</form>";


Help and advice, please.

Ethan






-- 
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.