Еще раз возвращаюсь ко всем вам с другим вопросом.
Я перепробовал все, что думал, а также большинство рекомендаций, которые нашел в Интернете и здесь, в Stackoverflow, но, похоже, ничего не решило эту проблему для меня.
По какой-то причине команда sql в моем коде возвращает false, хотя этого не должно быть.
Вот мой файл php с именем (dbRKS-DBTest.php)
<?php
//Gets server connection credentials stored in serConCred.php
//require_once('/../prctrc/servConCred2.php');
require_once('C:\wamp64.2\www\servConCred2.php');
//SQL code for connection w/ error control
$con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (!$con){
die('Could not connect: ' . mysqli_connect_error());
}
//Selection of the databse w/ error control
$db_selected = mysqli_select_db($con, DB_NAME);
if (!$db_selected){
die('Can not use ' . DB_NAME . ': ' . mysqli_error($con));
}
//VARIABLES & CONSTANTS
//Principal Investigator Information
$PI_Selected = '6';
//Regulatory Knowledge and Support Core Requests variables
$RKS_REQ_1_Develop = '1';
//This sets a starting point in the rollback process in case of errors along the code
$success = true; //Flag to determine success of transaction
//start transaction
$command = "SET AUTOCOMMIT = 0";
$result = mysqli_query($con, $command);
$command = "BEGIN";
$result = mysqli_query($con, $command);
//Delete this portion of code afyer testing is finished
//Core Requests saved to database
$sql = "INSERT INTO rpgp_form_table_3 (idPI, RKS_REQ_1_Develop)
VALUES ('$PI_Selected', '$RKS_REQ_1_Develop')";
//*************TEsts code for "SCOPE_IDENTITY()" -> insert_id() for mysql
$sqlInsertId = mysqli_insert_id($con); //This value is supposed to be 0 since no queries have been executed.
echo "<br>MYSQLi_INSERT_ID() value before query should be 0 and it is:= " . $sqlInsertId;
//Checks for errors in the db connection.
$result = mysqli_query($con, $sql); //Executes query.
if ($result == false){ //Checks to see for errors in previews query ($sql)
//die ('<br>Error in query to Main Form: Research Proposal Grant Preparation: ' . mysqli_error($con));
echo "<br>Result for the sql run returned FALSE. Check for error in sql code execution.";
echo "<br>Error given by php is: " . mysqli_error($con);
$success = false; //Chances success to false is it encounted an error in order to rollback transaction to database
}
else{
//*************TEsts code for "SCOPE_IDENTITY()" -> insert_id() for mysql
$sqlInsertId = mysqli_insert_id($con); //Saves the last id entered. This would be for the main table
echo "<br>MYSQLi_INSERT_ID() value after Main form query= " . $sqlInsertId; //Displays id last stored. This is the main forms id
$MAIN_ID = mysqli_insert_id($con); //Sets last entered id in the MAIN Form db to variable
}
//Checks for errors or craches inside the code
// If found, execute rollback
if ($success){
$command = "COMMIT";
$result = mysqli_query($con, $command);
echo "<br>Tables have been saved witn 0 errors.";
}
else{
$command = "ROLLBACK";
$result = mysqli_query($con, $command);
echo "<br>Error! Databases could not be saved. <br>
We apologize for any inconvenience this may cause. <br>
Please contact a system administrator at PRCTRC.";
}
$command = "SET AUTOCOMMIT = 1"; //return to autocommit
$result = mysqli_query($con, $command);
//Displays message
//echo '<br>Connection Successfully. ';
//echo '<br>Database have been saved';
//Close the sql connection to dababase
mysqli_close($con);
?>
Вот мой код html интерфейса php с именем (RPGPHomeQueryTest.php)
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8">
</head>
<form id = "testQuery" name = "testQuery" method = "post" action = "../dbRKS-DBTest.php" enctype = "multipart/form-data">
<input type = "submit" value = "Submit query"/>
</form>
</html>
А вот как выглядит моя база данных (rpgp_form_table_3):
Итак, когда я открою свой html-код, все, что я увижу, это кнопку, поскольку весь код там есть. После того, как вы нажмете кнопку, форма должна отправить и выполнить код php с именем (dbRKS-DBTest.php). Это должно принять заранее определенные значения, которые я уже объявил, и сохранить их в базе данных с именем (rpgp_form_table_3). Эта база данных настроена в формате InnoDB.
Теперь я должен получить сообщение о том, что «Таблицы были сохранены с 0 ошибками». но проблема в том, что я получаю вот это сообщение:
Честно говоря, не знаю почему. Я отправляю это сообщение, чтобы найти руководство по этой проблеме. Я все еще учусь сам, и было очень искренне не найти решения, чтобы исправить это.
Как всегда, я благодарю вас за терпение и руководство! Сообщите мне, какие еще подробности я могу предоставить.






Вот код SQL, который вы запускаете:
$sql = "INSERT INTO rpgp_form_table_3 (idPI, RKS_REQ_1_Develop)
VALUES ('$PI_Selected', '$RKS_REQ_1_Develop')";
Вы вставляете данные в rpgp_form_table_3. На скриншоте видно, что таблица имеет несколько (7) полей, но вы вставляете только 2 поля. Тогда возникает вопрос: нужно ли указывать значение для всех полей?
Ошибка, которую вы получаете, состояния
Error given by php is: Field 'idCollaRecord_1' doesn't have a default value Error! Databases could not be saved.
Понятно, что вам нужно вставить строку, указав значение для каждого столбца, а не только для двух столбцов, которые вас интересуют.
Пытаться
$sql = "INSERT INTO rpgp_form_table_3 (idPl, RKS_REQ_1_Develop, idCollaRecord_1, idCollaRecord_2, idCollaRecord_3, idCollaRecord_4)
VALUES ('$PI_Selected', '$RKS_REQ_1_Develop',0,0,0,0)";
Вы правы: в SQL вы можете (обратите внимание, что это может) не нужно указывать все значения. Это зависит от вашей схемы.
После тщательного обдумывания я заметил, что не определил каждую таблицу в своей базе данных, как вы сказали @David. Когда я определил их все, это устранило проблему, мой друг. Большое вам спасибо.
Попробуйте этот код вставки. Если PI_Selected - ЧИСЛО, используйте Первый. Если это строка, используйте вторую
$sql = "INSERT INTO rpgp_form_table_3 (idPI, RKS_REQ_1_Develop) VALUES (" .
$PI_Selected . ",'" . $RKS_REQ_1_Develop . "')";
$sql = "INSERT INTO rpgp_form_table_3 (idPI, RKS_REQ_1_Develop) VALUES ('" .
$PI_Selected . "','" . $RKS_REQ_1_Develop . "')";
Привет, Дэвид. Благодарю за ваш ответ. Насколько я понимаю, при вставке значений в таблицу sql вам не нужно указывать все значения, которые будут вставлены в базу данных, поскольку я определяю, какие столбцы я хочу заполнить. Затем я снова на всякий случай проверил ваш совет, но он все равно не сработал. :, (