php sqlite3表是否存在,测试sqlite表中是否存在值的最佳方法是什么? - php

这里的第一个问题,所以如果我做一些愚蠢的事情,请不要打扰我!

我正在创建一个包括注册等在内的登录系统,通过注册我需要测试3件事,以查看它们是否已在使用中。

我的初始测试代码如下所示:

$IDq = $userdbc->query("SELECT * FROM users WHERE userID = '$uID'");

$IDq->setFetchMode(PDO::FETCH_ASSOC);

$IDf = $IDq->fetch();

if($IDf['userID']){

echo '

ID exists

';

}

else{

echo '

ID does not exist?

';

}

我将需要测试是否存在重复的电子邮件和显示名称。我确定必须有更好的方法来解决此问题?

还是我真的要重复3次才能对每个项目进行测试?

这是我第一次使用数据库解决方案进行的实际投资。.非常感谢任何有用的输入-预先感谢!

编辑:我确实需要单独测试每个值,以便我可以重建带有适当错误消息的注册表单,准确说明需要更改的内容。抱歉,我应该更具体一些。

编辑:解决方案-谢谢Shakti Singh,以及其他所有人的帮助。

函数(使用带命名占位符的预准备语句):

function item_exists($dbc, $col, $val){

$query = $dbc->prepare("SELECT * FROM users WHERE $col = :val");

$query->execute(array(':val' => $val));

$fetch = $query->fetch();

if($fetch[$col]){

return true;

}

else{

return false;

}

}

我如何在注册验证功能中使用它:

$userdbc = new PDO('sqlite:db/users.s3');

if(item_exists($userdbc, 'userID', $_POST['id'])){

$valid = false;

array_push($sub['e'], 'User ID is not available.');

}

if(item_exists($userdbc, 'userEmail', $_POST['email'])){

$valid = false;

array_push($sub['e'], 'Email Address is already in use.');

}

if(item_exists($userdbc, 'userName', $_POST['name'])){

$valid = false;

array_push($sub['e'], 'Display Name already taken.');

}

$userdbc = null;

编辑:附加:

因为我只测试一项,所以我在item_exists()函数中替换了:

$query->execute(array(':val' => $val));

对于:

$query->bindParam(':val', $val);

$query->execute();

..仅仅因为执行一个数组对我来说有点愚蠢,因为它只包含一个键/值。

不知道实际的差异可能是什么,但是嘿,这是另一种选择。

编辑:附加-附加:

具有所有更改的功能:

function item_exists($dbc, $col, $val, $rn){

// updated the prepare statement as per James Anderson's suggestion.

$query = $dbc->prepare("SELECT COUNT($col) AS dupli FROM users WHERE $col = :val");

$query->bindParam(':val', $val);

$query->execute();

$fetch = $query->fetch();

// $fetch['dupli'] contains the number of matches found.

// $fetch[0] should also work, but not tested.

if($rn){ // if $rn = true, return the number of finds

return $fetch['dupli'];

}

else{ // else we are just testing for a match so..

if($fetch['dupli'] > 0){ // if we have one

return true;

}

else{

return false;

}

}

}

我只是觉得我应该添加这个,以防其他人像我一样挣扎,总是很高兴有可行的示例-也有评论^ _〜

我很确定这将是我的最后一次编辑,但是..永远不知道。

参考方案

不要对每个项目重复进行3次测试。

只需创建一个通用方法或函数,将为您要检查的每个项目调用该方法或函数,并根据数据库值返回true或false。

function item_exists($item_value,$item_type)

{

$IDq = $userdbc->query("SELECT * FROM users WHERE $item_type= '$item_value'");

$IDq->setFetchMode(PDO::FETCH_ASSOC);

$IDf = $IDq->fetch();

if($IDf[$item_type])

{

return true;

}

else

{

return false;

}

}

然后像这样调用函数

if (item_exists($userID, 'userID') === true)

{

echo 'user_id exists';

}

if (item_exists($emailID, 'email') === true)

{

echo 'email exists';

}

此方法将让您知道重复的内容。这样您就可以作为消息显示给最终用户。

验证IBAN PHP - php

在设计新平台时,我们尝试集成IBAN编号。我们必须确保IBAN已经过验证,并且存储在数据库中的IBAN始终正确。那么验证数字的正确方法是什么? 参考方案 正如我在其他问题中解释的逻辑一样,我尝试自己创建一个函数。根据Wikipedia文章中解释的逻辑,在下面找到合适的功能。国家特定验证。它适合吗http://en.wikipedia.org/wiki/Int…PHP:对数组排序 - php

请如何排序以下数组Array ( 'ben' => 1.0, 'ken' => 2.0, 'sam' => 1.5 ) 至Array ( 'ken' => 2.0, 'sam' => 1.5, 'ben' =&…PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00…PHP-全局变量的性能和内存问题 - php

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值