mysql - INSERT query in PHP Failing (returns blank error) -
this question has answer here:
- can mix mysql apis in php? 5 answers
i'm using following code in attempt insert user-provided values in <form> sql table. when insert query used in phpmyadmin, insertion successful, unsuccessful in following php. connection database successful.
<?php $servername = "localhost"; $username = "***"; $password = "***"; $db_name = "my_db"; $trip; $odom; $gals; $ppg; if (isset($_request['trip'])){ $trip = $_request['trip']; $odom = $_request['odom']; $gals = $_request['gals']; $ppg = $_request['ppg']; } // create connection $conn = mysqli_connect($servername, $username, $db_name, $password); // check connection if ($conn->connect_error) { die("connection failed: " . $conn->connect_error); } echo "connected "; here, i've tried using double quotes around query form string; i've omitted quotes well, no avail. also, in values, i've tried both single-quotations , omission thereof well, without success. variables double values, not strings.
$vals = "insert `log` (`trip`, `odometer`, `gallons_pumped`, `price_gallon`) values ('$trip', '$odom', '$gals', '$ppg')"; the return value of $retval false, no error provided.
$retval = mysql_query($vals); if ($retval) { echo "new record created successfully"; } else { echo "error: " . $vals . "<br>" . $retval->error; } mysql_close($conn); ?> is syntax incorrect? if not, why insert query unsuccessful?
you're mixing mysqli_* functions mysql_* functions. can't that; aren't same library.
use mysqli_*. please don't use mysql_*; mysql_* functions outdated, deprecated, , insecure. use mysqli or pdo instead.
the last block of code should (untested):
$retval = mysqli_query($vals); // changed if ($retval) { echo "new record created successfully"; } else { echo "error: " . $vals . "<br>" . mysqli_error($conn); // changed } mysqli_close($conn); // changed note change $retval->error mysqli_error($conn). definition, if reached point in code because $retval evaluated false , therefore not object.
also, please note wide open sql injection. sql statement this:
$vals = "insert `log` (`trip`, `odometer`, `gallons_pumped`, `price_gallon`) values ('$trip', '$odom', '$gals', '$ppg')"; but values ($trip, etc.) come straight user (via $_request). bad things can happen if user submits values containing, example, ' character. should use prepared statements, this:
$vals = "insert `log` (`trip`, `odometer`, `gallons_pumped`, `price_gallon`) values (?, ?, ?, ?)"; if($stmt = mysqli_prepare($conn, $vals)) { // adjust "sddd" below match data types; see http://php.net/manual/en/mysqli-stmt.bind-param.php mysqli_stmt_bind_param($stmt, "sddd", $trip, $odom, $gals, $ppg); $retval = mysqli_stmt_execute($stmt); } else { echo "error: " . $vals . "<br>" . mysqli_error($conn); } mysqli_close($conn);
Comments
Post a Comment