2016-02-20 9 views
-3

Я пытаюсь вставить переменную в базу данных mysql. Я прочитал различные сообщения о том, как это сделать, но они, похоже, не работают для меня, следующий код ничего не пишет в базе данных (переменная, похоже, прерывает запрос), однако, если я не использовать переменные, может ли кто-нибудь сказать мне, что я здесь делаю неправильно?Вставка переменной в базу данных MySQL

$dbhost = 'zzzzzzzzz'; 
$dbuser = 'xxxxxxxxx'; 
$dbpass = 'yyyyyyyyy'; 
$conn = mysql_connect($dbhost, $dbuser, $dbpass); 


// VARIABLE SETUP; 

$variable = 'variable'; 
$variable = mysql_real_escape_string($variable); 

if(! $conn) { 
    die('Could not connect: ' . mysql_error()); 
} 

$sql = 'INSERT INTO db_variables_insert'. 
     '(time, variable) '. 
     'VALUES ("2016-02-19 04:23:44", '$variable')'; 

mysql_select_db('wwwwww'); 
$retval = mysql_query($sql, $conn); 

if(! $retval) { 
    die('Could not enter data: ' . mysql_error()); 
} 

echo "Entered data successfully\n"; 

mysql_close($conn); 
+0

Пожалуйста узнать PDO или MySQLi и прекратить использование mysql_ уже. Смотрите: http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php – Ekin

+0

Вау, какой бесполезный комментарий! – user1419810

+0

У меня нет намерения быть злым, проблема с вашим кодом не заканчивается вашей проблемой. – Ekin

ответ

0

Вы должны использовать . для конкатенации строк в PHP, вы не можете просто поместить переменную рядом со строкой. И если столбец variable является строкой, вам нужно поместить его значение в кавычки.

$sql = 'INSERT INTO db_variables_insert'. 
     '(time, variable) '. 
     'VALUES ("2016-02-19 04:23:44", "' . $variable'")'; 

Вы также можете написать это как одну строку с переменной заменой, используя двойные кавычки вокруг строки PHP.

$sql = "INSERT INTO db_variables_insert 
     (time, variable) 
     VALUES ('2016-02-19 04:23:44', '$variable')"; 
3

Прежде всего, ваш вопрос, вы можете попробовать:

$sql = "INSERT INTO db_variables_insert". 
     "(time, variable) ". 
     "VALUES ('2016-02-19 04:23:44', '".$variable."')"; 

Однако, вы могли бы переписать более вменяемый, как подготовленное заявление, как:

/* mysqli_* to connect - ** See note on PDO below ** */ 

$mysqli = new mysqli("example.com", "user", "password", "database"); 
if ($mysqli->connect_errno) { 
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; 
} 

/* Prepared statement, stage 1: prepare */ 
$sql = "INSERT INTO db_variables_insert (time, variable) VALUES (?,?)"; 
if ($stmt = $mysqli->prepare($sql)) { 

    /* Prepared statement, stage 2: bind parameters and execute */ 
    $time = '2016-02-19 04:23:44'; 
    // Assuming you already define $variable here 

    if ($stmt->bind_param("ss", $time, $variable)) { 
     /* Here this bit ^can be "i" (integer), "s" (string) etc */ 

     $execute = $stmt->execute(); 

     if($execute === FALSE) { 
      echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error; 
     } 
     /*^you are done executing the sql if no errors */ 

    } else { 
     echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error; 
    } 
} else { 
    echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error; 
} 

/* explicit close recommended */ 
$stmt->close(); 

Примечания:

/** Recommended: Connect with PDO **/ 

$conn = new PDO('mysql:host=localhost;dbname=my_db;charset=UTF-8','user', 'pwd'); 

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

^полезный для это и практика: