SQL查询不起作用,在PHP上将字符串转换为日期

SQL查询不起作用,在PHP上将字符串转换为日期,php,string,date,extract,Php,String,Date,Extract,我想检查用户以YY-MM字符串格式输入的到期日期,我得到了这个日期,我得到了带有到期日期的卡片,查询在控制台phpmyadmin下工作得很好,但一旦切换到php,我期望的结果是空的。下面是SQL控制台下的代码 SELECT numero_carte,cvv, cc.numero_compte , email FROM carte_credit as cc, compte as cp WHERE numero_carte="*****" AND EXTRACT(

我想检查用户以YY-MM字符串格式输入的到期日期,我得到了这个日期,我得到了带有到期日期的卡片,查询在控制台phpmyadmin下工作得很好,但一旦切换到php,我期望的结果是空的。下面是SQL控制台下的代码

SELECT  
    numero_carte,cvv, cc.numero_compte , email
FROM
    carte_credit as cc, compte as cp
WHERE
    numero_carte="*****"
    AND EXTRACT(YEAR FROM date_expiration) = 2019
    AND EXTRACT(MONTH from date_expiration) = 12
    AND cc.numero_compte = Cp.numero_compte ;
这在SQL控制台上起作用,但当我使用准备好的查询时,如:

$moiExp=substr($dateExp,0,2);  // on converti en int pour pouvoir comparer dans la condition de la requete juste au dessous
$annExp="20".substr($dateExp,3,2); // on concatene pour avoir une annee de format 2019 en int

$reqA= $bdd->prepare("SELECT  numero_carte,cvv, cc.numero_compte , email
                               from carte_credit as cc, compte as cp
                                where numero_carte=?
                                AND  EXTRACT(YEAR FROM date_expiration ) =?
                                AND  EXTRACT(MONTH from date_expiration) = ?
                                AND  cc.numero_compte = Cp.numero_compte ");
$reqA->execute(array($NumCarteAcheteur,$annExp,$moiExp)); 

在本例中,结果为空,我尝试了所有方法,但我认为日期格式有问题。

您的月-年提取是向后的

$dateExp='18-10';//yy-mm

$moiExp=substr($dateExp,3,2); //=10
$annExp="20".substr($dateExp,0,2); //=2018
另一种选择是在连字符上分解,如果日期和月份可以是1或2位数,这可能会更容易

$e=explode('-',$dateExp);
$moiExp=$e[0];
$annExp="20".$e[1];

我希望这是某种学校项目,因为你不应该在不符合pci标准的情况下存储信用卡号码。

Ermm。。。你刚刚在网上发布了某人的信用卡号码吗?请注意,这也违反了PCI DSS。您不能存储未受保护的卡号,也绝对不能存储CVV。这是一个很好的被罚款的方式,并有你的能力处理卡吊销。-早在25年前,在ANSI-92 SQL标准中,这种旧式的逗号分隔的表列表样式就被正确的ANSI连接语法所取代,因此不鼓励使用它