php pdo从mysql只获得一个值;等于变量的值 [英] php pdo get only one value from mysql; value that equals to variable

查看:174
本文介绍了php pdo从mysql只获得一个值;等于变量的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经定义了变量$ row_id1(例如$ row_id1 = 1;)

I have defined variable $row_id1 (for example $row_id1 = 1;)

在mysql中,名为Number的列.

In mysql is column called Number.

要选择列号,并且如果该列中存在$ row_id,则要获取(获取,定义)该值.实际要检查编号"列中是否存在$ row_id值.

Want to select the column Number and if in the column exists $row_id, want to get (fetch, define) the value. Actually want to check if in column Number exists $row_id value.

代码有什么问题?

$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>';

在输出中,我得到数组$ Number1

In output I get Array $Number1

好像是简单的(愚蠢的)问题,但搜索了几个小时却没有解决办法

As if simple (stupid) question but searching for some hours and no solution

++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

更新代码

这部分与问题无关(仅作参考)

This part is not related to problem (only for information)

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);

这与问题有关(这里我从输入中获取值)

This is related to problem (here I get values from input)

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获得了最后一行.最后,我将number + 1传递给html隐藏的iput字段.我的意思是在页面加载中我得到了最后一个号码.如果用户单击按钮,则不执行代码.

Here I get last row number from mysql. Latter I pass the number+1 to html hidden iput field. I mean on page load I get last number. If user clicks on button do not execute the code.

//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'] ) {

会话(以上)

这是给我造成麻烦的部分 //从数据库后者获取Number以便与行ID(隐藏)进行比较.旨在确定是否需要记录新行或是否更新现有行.该代码在$ _POST上执行.因此必须定义$ row_id(如上定义)

This is the part that makes problem for me // Get Number from the DB latter to compare with row ID (hidden). Aim to decide if need to record new row or if to update existing. The code is executed on $_POST. So must define $row_id (defined above)

if( $_POST['register'] ) {

如果用户仅单击按钮,则执行代码

If user click on button only then execute the code

echo $row_id1 .' row_id1 before select Number where Number is $row_id1<br>';

这是要检查的.我看到row_id1号;这意味着该号码已收到.而下面想使用它

This is to check. I see row_id1 number; That means that the number is received. And just below want to use it

$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>';

仅在两次单击按钮时此回声

This echo only if 2 times click on button

这是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);
//}
?>
">

推荐答案

您需要根据所需结果使用访存功能.

You need to use fetch function according to your desired result.

  1. 如果您需要单个结果,则不再需要列名:

  1. If you need single result, no column name ever needed:

echo $Number1 = $stmt->fetchColumn();

  • 如果要返回许多结果,则无需再次输入列名:

  • If there are many results to be returned, no need for the column name again:

    $numbers = $sth->fetchAll(PDO::FETCH_COLUMN);
    

  • 它将返回一个数字数组.

    It will return an array of numbers.

    1. 如果需要一行,请使用fetch()
    2. 如果需要行数组,请使用fetchAll()
    1. If you need a row, use fetch()
    2. If you need array of rows, use fetchAll()

    这篇关于php pdo从mysql只获得一个值;等于变量的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆