> On Jun 24, 2021, at 6:33 AM, Stephen Reay <php-li...@koalephant.com> wrote:
> 
>> On 24 Jun 2021, at 17:07, Kamil Tekiela <tekiela...@gmail.com> wrote:
>> 
>> Hi Stephen,
>> 
>> I believe the idea was for dynamically generate table names, or numbered 
>> tables/columns. E.g. 
>> 
>> function getTable(string $table){
>>    // is_literal check here
>> }
>> 
>> $number = (int) $_GET['tableno'];
>> if($number < 0 || $number > 10) {
>>    throw new Exception("Invalid number");
>> }
>> 
>> $tablename = 'table_'.$number;
>> getTable($tablename);
>> 
>> The number is concatenated to the table name. 
>> 
>> —Kamil
> 
> Hi Kamil,
> 
> Thanks for at least trying to answer this question.
> 
> I’m sure someone somewhere does that and thinks its a good idea. I 
> respectfully (to you; probably less respectfully to someone if they tell me 
> they do this) disagree. I don’t think PHP should necessarily shy away from 
> features because they’re potentially dangerous, but I also don’t think it 
> should be adding new features/functions that are more dangerous, just to make 
> some weird (IMO bad-practice) edge cases easier.

WordPress Multisite does exactly that.  

Whether or not them doing so is a "good idea" is irrelevant as there are a 
large number of website that use that mode of WordPress currently active on the 
web.


> I’d suggest if they insist on that bizarre naming pattern, _and_ want to use 
> a literal string check, they could define an array of string numbers that 
> represent their table names.
> 
> $tbls = [‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ...];
> 
> getTable(’table_’ . $tbls[$number]);

Some WP MS installations support millions of thousands sites. See WordPress.com 
<http://wordpress.com/>.

But yes, I guess it could be possible for them to hack hack together 
'table_983761' out of literals via a Rube Goldbergian-function, if forced to.


> On Jun 24, 2021, at 6:35 AM, Stephen Reay <php-li...@koalephant.com> wrote:
> 
>> On 24 Jun 2021, at 17:16, Craig Francis <cr...@craigfrancis.co.uk> wrote:
>> 
>> On Thu, 24 Jun 2021 at 10:55, Stephen Reay <php-li...@koalephant.com> wrote:
>> 
>>> but still I have to keep asking: Why integers at all?
>>> 
>> 
>> While I'm not a fan of this approach, there is a lot of existing code and
>> tutorials that use:
>> 
>> $sql = 'WHERE id IN (' . implode(',', array_map('intval', $ids)) . ')';
>> 
>> $sql = sprintf('SELECT * FROM table WHERE id = %d;', intval($id));
>> 

And WordPress (and I am sure a lot of other legacy code) does not support 
parameterized queries in the DB object, at least not without jumping through 
tons of hoops.  Not to mention the 60k existing open-source plugins and the 
likely million custom plugins in the wild.

-Mike
P.S. Of course we could ignore the entirety of WordPress, but that just does 
not strike me as a prudent course of action.

Reply via email to