views:

31

answers:

2

Hi ,

I am using this code to insert some values in MySql table:

<?php
mysql_connect("localhost","root","root");
mysql_select_db("bib");

$id = "12";
$titlu = "Joe";

$query = "INSERT INTO carte SET id='$id', titlu='$titlu'";
$result = mysql_query($query);

// Display an appropriate message
if ($result)
echo "<p>Product successfully inserted!</p>";
else
echo "<p>There was a problem inserting the Book!</p>";

mysql_close();
?>

After running it into browser, the following error occurs:

"Apache HTTP Server has encountered a problem and needs to close. We are sorry for the inconvenience."

It seems that mysql_select_db("bib") statement causes it. Database is create , also table...

I am running php 5.3 and mysql 5.1 on windows xp sp 2.

Please any ideas are welcomed...

Thanks...

+1  A: 

try this to connect to database:

$mysqlID = mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD) or die("Unable to connect to database");
mysql_select_db(DB_DATABASE) or die("Unable to select database ".DB_DATABASE);

also, try this as your insert query:

$query = "INSERT INTO carte (id, title)  values ('".$id."', '".addslashes($titlu)."')
$result = mysql_query($query) or die(mysql_error()); 

By using die(), it will tell you where it has failed and why

PHPology
+1 well done showing how to use or die and mysql_error usage but you should aswell use the connection php mysql error and the same goes for selecting a db.
Prix
+2  A: 

Any of the mysql_* functions can fail for various reasons. You have to check the return values and if a function indicates an error (usually by returning FALSE) your script has to react appropriately.
mysql_error($link) and mysql_errno($link) can give you more detailed information about the cause. But you don't want to show all the details to just any arbitrary user, see CWE-209: Information Exposure Through an Error Message.

If you don't pass the connection resource returned by mysql_connect() to subsequent mysql_* functions calls, php assumes the last successfully established connection. You shouldn't rely on that; better pass the link resource to the functions. a) If you ever have more than one connection per page you must pass it anyway. b) If there is no valid db connection the php-mysql modules tries to establish the default connection which is usually not what you want; it only takes up more time to fail ..again.

<?php
define('DEBUGOUTPUT', 1);

$mysql = mysql_connect("localhost","root","root");
if ( !$mysql ) {
  foo('query failed', mysql_error());
}

$rc = mysql_select_db("bib", $mysql);
if ( !$rc) {
  foo('select db', mysql_error($mysql));
}

$id = "12";
$titlu = "Joe";

$query = "INSERT INTO carte SET id='$id', titlu='$titlu'";
$result = mysql_query($query, $mysql);

// Display an appropriate message
if ($result) {
  echo "<p>Product successfully inserted!</p>";
}
else {
  foo("There was a problem inserting the Book!", mysql_error($mysql), false);
}

mysql_close($mysql);

function foo($description, $detail, $die=false) {
  echo '<pre>', htmlspecialchars($description), "</pre>\n";
  if ( defined('DEBUGOUTPUT') && DEBUGOUTPUT ) {
    echo '<pre>', htmlspecialchars($detail), "</pre>\n";
  }
  if ( $die ) {
    die;
  }
}
VolkerK
Cool VolkerK , Thanks a lot it worked !!!
@user398920: Though you wrote that this is only a test script please keep sql injections in mind (and prevent them), see http://cwe.mitre.org/data/definitions/89.html , http://docs.php.net/mysql_real_escape_string and http://docs.php.net/pdo.prepared-statements
VolkerK