Я определил переменную $ row_id1 (например $ row_id1 = 1;)
В mysql – столбец с именем Number.
Хотите выбрать столбец Number и если в столбце существует $ row_id, вы хотите получить (выборку, определение) значения. На самом деле хотите проверить, существует ли в столбце Number значение $ row_id.
Что не так с кодом?
$stmt = $db->prepare("SELECT Number FROM 2_1_journal WHERE Number = :Number1"); $stmt->bindParam(':Number1', $row_id1); //value from $_POST $stmt->execute(); $Number1 = $stmt->fetchAll(PDO::FETCH_ASSOC); // seems here something is wrong echo $Number1 .' $Number1<br>';
На выходе я получаю Array $ Number1
Как будто простой (глупый) вопрос, но поиск нескольких часов и отсутствие решения
++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++
Обновленный код
Эта часть не связана с проблемой (только для информации)
require($_SERVER['DOCUMENT_ROOT'] . "/_additionally_protected/session.class.php"); $session = new session(); // Set to true if using https $session->start_session('_a', false); session_regenerate_id(); //require($_SERVER['DOCUMENT_ROOT'].'/_additionally_protected/request_blocker.php'); //slow page load require($_SERVER['DOCUMENT_ROOT'].'/_measure_time_start.php'); require($_SERVER['DOCUMENT_ROOT'].'/_additionally_protected/db_config.php'); header('Content-type: text/html; charset=utf8'); require($_SERVER['DOCUMENT_ROOT'] . "/only_private/blackhole.php"); ini_set('session.bug_compat_warn', 0); ini_set('session.bug_compat_42', 0);
Это связано с проблемой (здесь я получаю значения от ввода)
if(get_magic_quotes_gpc()) $row_id1 = htmlspecialchars(stripslashes($_POST['row_id1'])); else $row_id1 = htmlspecialchars($_POST['row_id1']); echo $row_id1 .' row_id1 from $_POST<br>';
Подключиться к mysql
try { $db = new PDO("mysql:host={$dbhost};dbname={$dbname};charset=utf8", $dbuser, $dbpass//, array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); , array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); //echo "Connected to database"; // check for connection } catch(PDOException $ex) { //echo "An Error occured!"; //user friendly message //print "Error!: " . $ex->getMessage() . "<br/>"; //some_logging_function($ex->getMessage()); exit; }
Здесь я получаю номер последней строки из mysql. Последнее я передаю число + 1 в html скрытое поле iput. Я имею в виду при загрузке страницы, я получаю последний номер. Если пользователь нажимает кнопку, не выполняйте код.
//fetch last Number to pass to row_id and entry_id if( !$_POST['register'] ) { echo '!$_POST[register] <br>'; //+++++++++++++ now multiple PDO // Select table with query $stmt = $db->query(" SELECT Number FROM 2_1_journal ORDER BY Number DESC LIMIT 1 "); // Set fetching mode $stmt->setFetchMode(PDO::FETCH_ASSOC); // Assign $row as your key to access Table fields foreach ($stmt as $row) : echo $row['Number'] .' $row[Number] On page load (reload) get number of last row in mysql; to pass to Entry ID and rowid<br>'; $_SESSION['last_number_from_mysql'] = $row['Number']; endforeach; }//if( !$_POST['register'] ) {
Сессия (выше)
Это часть, которая создает для меня проблему // Получает номер из последнего БД для сравнения с идентификатором строки (скрытым). Цель – решить, нужно ли записывать новую строку или обновлять существующие. Код выполняется на $ _POST. Поэтому необходимо определить $ row_id (определенный выше)
if( $_POST['register'] ) {
Если пользователь нажимает кнопку только, то выполните код
echo $row_id1 .' row_id1 before select Number where Number is $row_id1<br>';
Это нужно проверить. Я вижу строку row_id1; Это означает, что число получено. И чуть ниже хотите его использовать
$stmt = $db->prepare("SELECT Number FROM 2_1_journal WHERE Number = :Number1"); $stmt->bindParam(':Number1', $row_id1); $stmt->execute(); echo $Number1 = $stmt->fetchColumn() .' $Number1<br>';
Это эхо, только если 2 раза нажмите кнопку
Вот вкладка html
<input type="tex" name="row_id1" id="row_id1" value=" <?php //if( ($_POST['register']) === 'Save draft' ) { //echo $_POST['row_id1']; //} //else { echo ($_SESSION['last_number_from_mysql'] + 1); //} ?> ">
Вам нужно использовать функцию выборки в соответствии с вашим желаемым результатом.
Если вам нужен единственный результат, имя столбца никогда не понадобилось:
echo $Number1 = $stmt->fetchColumn();
Если есть много результатов, которые нужно вернуть, не нужно снова использовать имя столбца:
$numbers = $sth->fetchAll(PDO::FETCH_COLUMN);
Он вернет массив чисел.
fetch()
fetchAll()
Пытаться
echo $Number1['Number'] .'<br>';
первое изменение
$Number1 = $stmt->fetchAll(PDO::FETCH_ASSOC);
в
$Number1 = $stmt->fetch(PDO::FETCH_ASSOC);
так как я считаю, что вы извлекаете только 1 строку.
вы получите номер ur как
echo $Number1['Number']
Dins